在烧瓶中返回 HTTP 状态码 201

Posted

技术标签:

【中文标题】在烧瓶中返回 HTTP 状态码 201【英文标题】:Return HTTP status code 201 in flask 【发布时间】:2011-12-11 01:35:23 【问题描述】:

我们将 Flask 用于我们的一个 API,我只是想知道是否有人知道如何返回 HTTP 响应 201?

对于404等错误我们可以调用:

from flask import abort
abort(404)

但是对于 201 我得到了

LookupError: 201 也不例外

我是否需要在文档中创建自己的异常,例如 this?

【问题讨论】:

return '', 201 这个,因为 201 不是错误。这是一个成功的状态。 【参考方案1】:

您可以使用 Response 返回任何 http 状态代码。

> from flask import Response
> return Response("'a':'b'", status=201, mimetype='application/json')

【讨论】:

这应该是公认的答案,这是首选方法。【参考方案2】:

你可以阅读它here.

return render_template('page.html'), 201

【讨论】:

这需要page.html...它不会自己工作。 对我来说,这种类型的错误处理只有在 InvalidUsage 是 werkzeug.exceptions.HTTPException 的子节点而不是一般异常时才有效(在 IIS 之后)【参考方案3】:

由于在返回语句中缺少建议的发送状态代码 如果你将它存储在像

这样的变量中
notfound = 404
invalid = 403
ok = 200

并使用

return xyz, notfound

确保它的类型是 int 而不是 str。当我面临这个小问题时 这里也是全球遵循的状态代码列表 http://www.w3.org/Protocols/HTTP/HTRESP.html

希望对你有帮助。

【讨论】:

好方法,但最好像status.NOT_FOUND这样的模块来访问它们【参考方案4】:

你可以的

result = 'a': 'b'
return result, 201

如果您想在响应中返回 JSON 数据以及错误代码 您可以阅读有关响应 here 和 here 的 make_response API 详细信息

【讨论】:

你甚至不需要 jsonify 客户端django??我们在谈论烧瓶! 哎呀@pihentagy 很抱歉混淆了。更新解决方案【参考方案5】:

在您的烧瓶代码中,理想情况下,您还应该尽可能频繁地指定 MIME 类型:

return html_page_str, 200, 'ContentType':'text/html'

return json.dumps('success':True), 200, 'ContentType':'application/json'

...等

【讨论】:

【参考方案6】:

你也可以使用 flask_api 来发送响应

from flask_api import status

@app.route('/your-api/')
def empty_view(self):
    content = 'your content here'
    return content, status.HTTP_201_CREATED

你可以在这里找到参考http://www.flaskapi.org/api-guide/status-codes/

【讨论】:

【参考方案7】:

抄袭Luc'scomment here,但要返回空白响应,例如201,最简单的选择是在您的路由中使用以下返回。

return "", 201

例如:

    @app.route('/database', methods=["PUT"])
    def database():
        update_database(request)
        return "", 201

【讨论】:

【参考方案8】:

取决于 API 的创建方式,通常使用 201(已创建)您将返回已创建的资源。例如,如果它正在创建一个用户帐户,您将执行以下操作:

return "data": "username": "test","id":"fdsf345", 201

注意后缀数字是返回的状态码。

或者,您可能希望向客户端发送消息,例如:

return "msg": "Created Successfully", 201

【讨论】:

【参考方案9】:

在我的情况下,我必须结合以上内容才能使其工作

return Response(json.dumps('Error': 'Error in payload'), 
status=422, 
mimetype="application/json")

【讨论】:

【参考方案10】:

所以,如果您使用 API 的 flask_restful 包 返回 201 会变成这样

def bla(*args, **kwargs):
    ...
    return data, 201

其中data 应该是任何可散列/JsonSerialable 值,如字典、字符串。

【讨论】:

【参考方案11】:

对于错误 404 你可以

def post():
    #either pass or get error 
    post = Model.query.get_or_404()
    return jsonify(post.to_json())

201成功

def new_post():
    post = Model.from_json(request.json)
    return jsonify(post.to_json()), 201, \
      'Location': url_for('api.get_post', id=post.id, _external=True)

【讨论】:

【参考方案12】:

您只需要在返回数据后添加您的状态码,如下所示:

from flask import Flask

app = Flask(__name__)
@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!',201
if __name__ == '__main__':
    app.run()

这是一个基本的烧瓶项目。启动后你会发现当我们请求http://127.0.0.1:5000/时,你会从web broswer console得到一个状态201。

【讨论】:

欢迎来到 SO。这是一个十年前的问题,已经回答了! :o)

以上是关于在烧瓶中返回 HTTP 状态码 201的主要内容,如果未能解决你的问题,请参考以下文章

Http 常用请求方式和返回状态码

http网络请求 返回不同的状态码

Spring MVC 返回自定义 HTTP 状态码(无错误)

HTTP状态码

HTTP返回状态码和错误

Http 状态码(Status Codes)