一:Flask处理请求和回复

Flask和Werkzeug提供了request和response对象去处理请求和回复的数据。Flask通过@app.route包裹的函数(后面我们称这个函数叫做视图函数),来响应请求。

视图函数返回的值可以分为三类:

string:返回的就是普通的字符串。

一个response的实例:具备HTTP属性的一个响应的对象的实例。通过make_respone来构建

一个元组:(string,status)或者(string,status,http_headers)这样的结构,对于这种方式很方面不需要创建response的实例。

下面是这三种方式的例子:

# encoding=utf-8
from flask import Flask,make_response

app = Flask(__name__)

@app.route("/string/")
def return_string():
    return "Hello,world"

@app.route("/object/")
def return_object():
    headers={'Content-Type':'text/plain'}
    return make_response('Hello,world',200,headers)

@app.route("/tuple/")
def return_tuple():
    return "hello,world",304,{'Content-Type':'text/plain'}

Flask实例教程四_第1张图片

Flask实例教程四_第2张图片

Flask实例教程四_第3张图片

三种方式的总结:

方式一:   最简单,最常用,后面可借助模板引擎输出html,但是不可以定制响应。

方式二:灵活性强,可对响应报文进行定制,定制status等等,但是需要创建一个response的实例

方式三:   具备方式二的优点,并且简单明了。

二:Flask request对象详解

通过下面的一个例子全面的去了解flask中的request对象:

# encoding=utf-8
from flask import Flask,request

app = Flask(__name__)

def dump_request_detail(request):
    request_detail="""
request.endpoint:{request.endpoint}
request.method:{request.method}
request.view_args:{request.view_args}
request.args:{request.args}
request.form:{request.form}
request.user_agent:{request.user_agent}
request.files:{request.files}
request.is_xhr:{request.is_xhr}
{request.headers}""".format(request=request).strip()
    return request_detail

@app.before_request
def call_me():
    app.logger.debug(dump_request_detail(request))

@app.after_request
def call_me(response):
    app.logger.debug("#After Request#\n"+repr(response))
    return response

@app.route("/string/")
def return_string():
 return "Hello,World"

上面这个程序会通过app.logger.debug开启日志调试,通过在dos窗口下可以看下日志输出的信息。

重点介绍下before_request这个装饰器,这个装饰器包裹下的函数会在每次request前执行。

after_request会在每次request结束后执行。但是有一个情况就是如果一个request没有正常结束的话,那么after_request下包裹的函数是不会执行的。

那么就有另外一个装饰器teardown_request,这个装饰器无论请求是否正常结束都会执行的。

接下来开始运行上面的应用,并查看DOS窗口下的输出信息。

Flask实例教程四_第4张图片

Flask实例教程四_第5张图片

Flask实例教程四_第6张图片

到此本节到此结束,更多知识还需要读者自己 进一步去了解。