2.5.4、响应

 

Flask 调用视图函数后,会将其返回值作为响应的内容。大多数情况下,响应就是一个简单的字符串,作为 HTML 页面回送客户端。但 HTTP 协议需要的不仅是作为请求响应的字符串。HTTP 响应中一个很重要的部分是状态码,Flask 默认设为 200,这个代码表明请求已经被成功处理。

如果视图函数返回的响应需要使用不同的状态码,那么可以把数字代码作为第二个返回值,添加到响应文本之后。例如,下述视图函数返回一个 400 状态码,表示请求无效:

@app.route('/')

def index():

    return '<h1>Bad Request</h1>', 400

 

视图函数返回的响应还可接受第三个参数,这是一个由首部(header)组成的字典,可以添加到 HTTP 响应中。一般情况下并不需要这么做

如果不想返回由 1 个、2 个或 3 个值组成的元组,Flask 视图函数还可以返回 Response 对象。make_response() 函数可接受 1 个、2 个或 3 个参数(和视图函数的返回值一样) ,并返回一个 Response 对象。有时我们需要在视图函数中进行这种转换,然后在响应对象上调用各种方法,进一步设置响应。下例创建了一个响应对象,然后设置了 cookie:

from flask import make_response

 

@app.route('/')

def index():

    response = make_response('<h1>This document carries a cookie!</h1>')

    response.set_cookie('answer', '42')

    return response

 

有一种名为重定向的特殊响应类型。这种响应没有页面文档,只告诉浏览器一个新地址用以加载新页面。重定向经常在 Web 表单中使用,第 4 章会进行介绍。

重定向经常使用 302 状态码表示,指向的地址由 Location 首部提供。重定向响应可以使用3 个值形式的返回值生成,也可在 Response 对象中设定。不过,由于使用频繁,Flask 提供了 redirect() 辅助函数,用于生成这种响应:

#!/usr/bin/env python

#_*_ coding:utf-8 _*_

 

from flask import Flask

from flask import request

from flask import make_response

from flask import redirect

 

app = Flask(__name__)

 

@app.route("/")

def index():

return redirect("http://www.baidu.com")

 

@app.route("/user/<name>")

def user(name):

return "<h1>Hello,%s</h1>" % name

 

if __name__ == '__main__':

app.run(debug=True)

说明:访问http://127.0.0.1:5000会跳转到百度首页

 

###如下这个暂未明白###

还有一种特殊的响应由 abort 函数生成,用于处理错误。在下面这个例子中,如果 URL 中动态参数 id 对应的用户不存在,就返回状态码 404:

from flask import abort

 

@app.route('/user/<id>')

def get_user(id):

    user = load_user(id)

    if not user:

        abort(404)

    return '<h1>Hello, %s</h1>' % user.name

注意,abort 不会把控制权交还给调用它的函数,而是抛出异常把控制权交给 Web 服务器。

posted @ 2017-03-29 18:19  哈喽哈喽111111  阅读(366)  评论(0编辑  收藏  举报