Flask Python 中的 HTTP 状态 405 和 Restful API

Posted

技术标签:

【中文标题】Flask Python 中的 HTTP 状态 405 和 Restful API【英文标题】:HTTP Status 405 and Restful API in Flask Python 【发布时间】:2017-06-04 22:29:22 【问题描述】:

总体目标

对于我正在开发的没有框架的网上商店,我需要为应用程序的 restful API 定义一个良好的路径。

问题

当我加载页面时(例如:localhost:.../api/favorites),我收到 HTTP 405 错误消息:“方法不允许”。

我搜索了不同类型的资源,例如关于 HTTP 405 错误的论坛帖子:HTTP Status 405 - Method Not Allowed Error for Rest API。但我不知道这将如何解决我的错误。

我研究了'Flask Documentation'并找到了一个例子:

@app . url_defaults 
  def add_language_code ( endpoint , values ) : 
    if lang_code in values or not g . lang_code : 
      return 
    if app . url_map . is_endpoint_expecting ( endpoint , lang_code ) : 
      values [    lang_code ] = g . lang_code

但我找不到我做错了什么或遗漏了什么,最重要的是:为什么我会在这个 @api 路由中收到 HTTP 405 错误。

我的项目说明:

在数据库中,我有一个名为 'favorites' 的表,其中包含 'user_id' 和 'product_id 列。在 /favorites 页面上,我想从收藏夹表中加载数据以显示(特定)用户收藏的项目。 但首先我只想从数据库中导入数据。 我想通过从数据库中检索 product_id 来做到这一点(第一条路线)。稍后我想指定只有在您订购商品时才能收藏它。 (orderhistory 或由 user_id 组合)(第二条路线)。

webshop前端用html/css/javascript做,后端用python烧瓶。

问题:

HTTP 405 消息的错误是由于路由到 API 的这段代码中的错误吗?

有人能理解并解释我的确切代码错误,以便我可以通过了解导致错误的原因来尝试修复它吗?

第一条路线

@api.route('/favorites/<int:product_id>', methods = ['GET'])
   def get_favorites(product_id):
      return favorites.get_favorites(product_id)

第二条路线

@api.route('/favorites/<int:user_id>')
   def get_favorites_by_user_id(user_id):
     return favorites.get_favorites_by_user_id(user_id)

非常感谢您!

【问题讨论】:

你的项目完成后可以分享链接吗?我有兴趣建立一个基于 Flask 的网上商店。你有没有尝试过这样的pythonhosted.org/flask-itemshop/# @saitam schoolproject 没有在线发布,但可以在 GitHub 上找到不同的变体,使用术语 'flask web''project'例子。 【参考方案1】:

如果你能展示你的前端代码就好了。但我认为您在没有在逻辑中列出 methods=['GET', 'POST'] 的情况下向后端发出了发布请求。从而得到 405。

只需将 POST 添加到您的列表中

【讨论】:

哦,我认为应该可以解决问题。您的意思是这样的:使用 POST 方法添加新路由? @api.route('/favorites', methods=['POST']) def post_favorites(favorites): return favorites.post_favorites(favorites) 因为我仍然遇到同样的错误。 @Sophievda Ha 很高兴这有效!这真是一个直观的猜测,哈哈。如果你能接受就好了。

以上是关于Flask Python 中的 HTTP 状态 405 和 Restful API的主要内容,如果未能解决你的问题,请参考以下文章

Python-Flask中的render_template不起作用

python面试题四:Python web框架

Python3 - 初探 Flask-Restful

Python3 - 初探 Flask-Restful

用于无状态应用程序的 Python Flask-WTF CSRF

使用Python和Flask编写Prometheus监控