开发者社区 > 云原生 > Serverless > 正文

请问下,我使用python的tornado开发,为什么post请求的路由会找不到。

请问下,我使用python的tornado开发,为什么post请求的路由会找不到。

展开
收起
芬奇福贵 2023-03-30 17:46:55 793 0
8 条回答
写回答
取消 提交回答
  • 在 Tornado 中,如果您的 POST 请求路由无法找到,可能有以下几个原因:

    1、请求路由没有正确设置:请确保您的 POST 请求路由已经正确设置。在 Tornado 中,可以通过使用 @tornado.web.post 装饰器来设置 POST 请求路由。

    例如:

    import tornado.web
    
    class MainHandler(tornado.web.RequestHandler):
        @tornado.web.post
        def post(self):
            # 处理POST请求
            pass
    

    2、请求的 Content-Type 不匹配:Tornado 默认情况下只处理 application/x-www-form-urlencoded 和 multipart/form-data 类型的 POST 请求,如果请求的 Content-Type 不是这两种类型,Tornado 将不会处理该请求。因此,请确保您的请求 Content-Type 设置正确。

    例如:

    import tornado.httpclient
    import json
    
    data = {'key': 'value'}
    headers = {'Content-Type': 'application/json'}
    
    http_client = tornado.httpclient.AsyncHTTPClient()
    response = await http_client.fetch(url, method='POST', body=json.dumps(data), headers=headers)
    

    在这个例子中,我们使用了 application/json 作为 Content-Type,需要在请求头中设置,以确保请求能够被正确处理。

    3、请求体数据未解析:在处理 POST 请求时,需要将请求体数据解析为可用的 Python 对象。如果您没有手动解析请求体数据,可以通过在 Tornado 应用程序中设置 tornado.web.RequestHandler 的 prepare 方法来自动解析请求体数据。

    例如:

    import tornado.web
    import json
    
    class MainHandler(tornado.web.RequestHandler):
        async def prepare(self):
            if 'Content-Type' in self.request.headers and self.request.headers['Content-Type'].startswith('application/json'):
                self.request.body = json.loads(self.request.body)
    

    在这个例子中,我们将请求体数据解析为 JSON 格式的 Python 对象,并将其存储在 request.body 中。然后,您可以在 POST 请求路由中使用 self.request.body 访问解析后的请求体数据。

    以上是一些可能导致 POST 请求路由无法找到的原因,您可以根据您的具体情况进行排查和解决。

    2023-03-31 23:12:53
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    按理说不会有这个问题,拿postman试试先排查一下

    2023-03-31 17:02:20
    赞同 展开评论 打赏
  • 可能是因为没有正确地设置请求处理函数吧。。。

    2023-03-31 10:01:22
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,根据你的描述,推测出应该是你未在应用程序中正确定义路由 - 请确保您在应用程序中正确定义了路由,并使用POST请求方法。您可以使用Tornado的@tornado.web.post装饰器来定义处理POST请求的路由。

    2023-03-31 09:51:01
    赞同 1 展开评论 打赏
  • 可能是您的路由设置有误或者请求的参数不正确导致的。建议您检查一下路由设置和请求参数是否正确。

    2023-03-31 08:31:38
    赞同 展开评论 打赏
  • 从事java行业9年至今,热爱技术,热爱以博文记录日常工作,csdn博主,座右铭是:让技术不再枯燥,让每一位技术人爱上技术

    函数计算python语言示例代码的tornado[custom]示例代码地址:https://github.com/devsapp/start-web-framework/tree/master/web-framework/python/tornado/src?spm=a2c4g.11186623.0.0.3f4a5b75enLJDR 可以下载实例代码测试一下看是否可以正常跑通,然后再基于此基础上进行业务改造

    2023-03-30 17:55:09
    赞同 展开评论 打赏
  • 你看看你的触发器有没有加post配置。

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-03-30 17:52:48
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    在使用 Tornado 框架开发时,如果 POST 请求的路由无法找到,可能是因为你没有正确地设置请求的 content-type 类型。

    具体来说,如果你使用的是 tornado.web.RequestHandler 类来处理 POST 请求,那么默认情况下,请求的 content-type 类型是 application/x-www-form-urlencoded,而不是 application/json。如果你想要处理 JSON 格式的 POST 请求,你需要使用 self.request.body 属性来获取请求体中的 JSON 数据。

    以下是一个处理 JSON 格式 POST 请求的示例代码:

    import tornado.web import json

    class MyHandler(tornado.web.RequestHandler): def post(self): # 获取请求体数据 body = self.request.body # 将 JSON 数据解析为 Python 对象 data = json.loads(body) # 处理请求数据 # ... # 返回响应 self.write({'status': 'success'})

    if name == 'main': app = tornado.web.Application([(r'/my/api', MyHandler)]) app.listen(8888) tornado.ioloop.IOLoop.current().start()

    在上面的示例代码中,我们首先使用 json 模块将请求体中的 JSON 数据解析为 Python 对象,然后再对数据进行处理。注意,返回响应时,我们使用 self.write() 方法来将 Python 对象转换为 JSON 格式的响应数据。

    如果你使用的是其他的 Tornado 请求处理类,也可能需要进行类似的设置。因此,建议你在处理 POST 请求时,仔细查看 Tornado 文档,并根据实际情况设置请求的 content-type 类型以及获取请求体中的数据。

    2023-03-30 17:52:48
    赞同 展开评论 打赏
滑动查看更多

快速交付实现商业价值。

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载