一、正常响应
Flask调动视图函数后,会将其返回值作为响应的内容。多数情况下,就是一个简单的字符串。但是HTTP协议需要的不仅仅是作为响应的字符串,另一个很重要的部分是状态码,Flask默认是200,表示成功处理了请求。但是如果不成功或者需要返回其它状态码怎么处理呢?可以把状态码作为返回的第二个参数,例:
@app.route('/')
def index():
return '<h1>Bad Request</h1>', 400 # 400表示请求无效
二、封装响应
除了状态码作为第二个参数返回外,返回的响应还可以接受第三个参数,这一个是响应头的字典。但这样看起来会很繁琐。Flask提供了特定的函数make_response()来统一处理返回值,函数可以接受之前之前的3个参数(不一定非要3个,2个1个都可以),返回一个和之前等效的相应对象。除此之外,还可以对响应进一步设置,比如设置cookie:
from flask import make_response
@app.route('/')
def index():
response = make_response('<h1>Rookie!</h1>')
response.set_cookie('Rookie', 'Believe Forever!')
return response
除了设置cookie外,还可以对响应对象进一步设置,响应对象常见的属性和方法如下:
属性或方法 | 说明 |
---|---|
status_code | 数字状态码 |
headers | 响应头 |
set_cookie() | 设置或添加一个cookie |
delete_cookie() | 删除一个cookie |
content_length | 响应主体的长度 |
content_type | 响应主体的类型 |
set_data() | 使用字符串或字节值设置响应 |
get_data() | 获取响应主体 |
三、重定向
除了上述的响应,另外有一种特殊的响应类型。这种响应不返回页面内容,而是一个新的URL,用来重新定位到一个新页面。这种响应称为重定向,重定向的响应依赖于redirect()函数:
from flask import redirect
@app.route('/')
def index():
return redirect('http://www.csdn.com') # 状态码默认302
四、错误处理
还有一种特殊的响应由abort()函数生成,用来处理错误,abort()会直接抛出异常:
from flask import abort
@app.route('/user/<id>')
def get_user(id):
user = load_user(id)
if not user:
abort(404) # 如果用户不存在,返回状态码404
return '<h1>Hello, {}</h1>'.format(user.name)
参考资料:《Flask Web开发(第二版)》