一: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‘}
三种方式的总结:
方式一: 最简单,最常用,后面可借助模板引擎输出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实例教程四
时间: 2024-10-06 22:32:16