在 Flask 中返回 201 HTTP 状态码

我们正在使用Flask 来创建 API,是否有人知道如何返回 201 HTTP 状态码?

对于404这样的错误,我们可以调用:

from flask import abort
abort(404)

但是针对 201 具体报错如下:

LookupError: no exception for 201

我是否需要在文档中创建自己的异常,如这个文档里的描述一样 ?

278029 次浏览

你可以读到它在这里。

return render_template('page.html'), 201

返回语句中缺少建议的发送状态代码 如果你把它存储在某个变量中,比如

notfound = 404
invalid = 403
ok = 200

和使用

return xyz, notfound

> time确保它的类型是int而不是str。因为我面临这个小问题 此外,这里是状态代码的列表遵循全局 http://www.w3.org/Protocols/HTTP/HTRESP.html < / p >

希望能有所帮助。

在你的flask代码中,理想情况下,你应该尽可能多地指定MIME类型,以及:

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


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

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

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

你可以这样做

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

如果您想在响应中返回JSON数据和错误代码 你可以阅读响应在这里在这里来了解make_response API的细节

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

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

您还可以使用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/

所以,如果你正在使用flask_restful包的API 返回201将变成

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


其中data应该是任何可哈希/ JsonSerialiable值,如dict, string。

根据API是如何创建的,通常使用201 (created)返回创建的资源。例如,如果它是创建一个用户帐户,你会这样做:

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

注意,附加的数字是返回的状态代码。

或者,你可能想要发送一个消息给客户端,比如:

return {"msg": "Created Successfully"}, 201

剽窃卢克的 这里的评论,但是要返回一个空白响应,就像201一样,最简单的选择是在你的路由中使用下面的return。

return "", 201

例如:

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

对于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)}

你只需要在你返回的数据后添加你的状态码,就像这样:

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浏览器控制台得到一个状态201。