在flask程序中,客户端发出的请求触发相应的视图函数,获取返回值会作为响应的主体,最后生成完整的响应,即响应报文。
响应报文主要由协议版本、状态码、原因短语、响应首部和响应主体组成。
类型 | 状态码 | 原因短语 | 说明 |
---|---|---|---|
成功 | 200 | OK | 请求被正常处理 |
成功 | 201 | Created | 请求被处理,并创建了一个新资源 |
成功 | 204 | No Content | 请求处理成功,但无内容返回 |
重定向 | 301 | Move Permanently | 永久重定向 |
重定向 | 302 | Found | 临时性重定向 |
重定向 | 304 | Not Modified | 请求的资源未被修改,重定向缓存的资源 |
客户端错误 | 400 | Bad Request | 表示请求无效,即请求报文中存在错误 |
客户端错误 | 401 | Unauthorized | 类似403,表示请求资源未授权 |
客户端错误 | 403 | Forbidden | 表示请求资源被服务器拒绝访问 |
客户端错误 | 404 | Not Found | 表示服务器上找不到请求的资源或URL无效 |
服务器端错误 | 500 | Internal Server Error | 服务器内部发生错误 |
响应大部分内容由服务器处理,大多数情况下,我们只负责返回主体内容。响应在flask中使用Response对象表示。
Flask会先判断是否可以找到与请求url相匹配的路由,如果没有返回404。如果找到,就会调用对应的视图函数,视图函数的返回值构成了响应报文的主题内容,正确返回的状态码为200。
如果你访问http://localhost:5000/hi,你会发现页面加载后地址栏中的URL变成了http://localhost:5000/hellp。这种行为被称为重定向,你可以理解为网页跳转。
代码示例:
from flask import Flask, redirect, url_for
@app.route('/hello')
def hello():
# 直接返回网页
return redirect('/hi')
@app.route('/hi')
def hi():
return redirect(url_for('hello'))
如果你访问http://localhost:5000/brew/coffee,会获得一个418错误响应(I’m a teapot)
大多数情况下,flask可以自动处理常见的错误响应。Http错误对应的异常类在werkzeug的werkzeug.exceptions模块中被定义,抛出这些异常即可返回对应的错误响应。如果你想手动返回错误响应,你可以使用flask提供的abort()函数。
from flask import Flask, abort
@app.route('/404')
def not_found():
abort(404)
abort 函数不需要使用return返回,但他之后的代码也不会在执行。
from flask import jsonify
@app.route('/foo')
def foo():
return jsonify(name="hello", gender="45")
return jsonify({"name": "hello", "gender": "45")
return jsonify(message="error"), 500
flask获取json数据可以使用request.get_json()方法和request.json属性。