Web框架是构建Web应用的一种方式。尽管如今不少语言如PHP、Java都能开发Web应用,这些语言也都有相应成熟的Web框架,可是请求处理是这些Web框架的核心。知乎问答-如何学习Web框架 提到Web框架涉及的基本元素,请求处理是学习Web框架的首要问题。html
Flask 是一个用于 Python 的微型网络开发框架。python
Flask的‘微’体如今它只提供Web服务的基本功能,其余的功能是由Flask的扩展实现,用户能够根据需求应用核心扩展。它的基本功能依赖于符合 WSGI
规范(Web Server Gateway Interface)的 Werkzeug
库和模板系统 Jinja2
。
当咱们经过URL访问网站时,是向Web服务器发送了请求。服务器会根据URL将请求交给相应的Web程序处理。因此服务器与Web应用程序的交互须要必定的规则。而Python专用的规范是WSGI [PEP-3333定义],文章 WSGI简介 给出了简单说明。flask
Flask涉及到两个重要的类——Flask和Blueprint[蓝本] 类。
flask的应用程序须要Flask类实例化才能运行,网站的基本配置信息也包含在此类中。
实例化以下:segmentfault
from flask import Flask app = Flask(__name__)#__name__程序的文件名,经过此变量定位资源文件位置
配置以下:api
app.config['CONFIGURATION'] = "CONFIGURATION"
Blueprint类与Flask相似,它可以更好的组织Web应用程序,并能延迟Flask类实例的建立。服务器
路由
的存在是为了将Web服务的请求转交给Flask程序实例的函数处理,简单的说处理URL和函数之间的关系称为路由。函数称为视图函数
。Flask类
包含了route装饰器,经过初始化Flask类注册视图函数。cookie
@app.route('/') def index(): return "<h1>Hellow World</h1>"
当访问网站根域名时,会执行index函数,返回值的结果会在网页中显示。。网络
在不少时候用户不一样,使用的URL不一样,带参数的路由可以很好的处理URL中变化的部分。如在网页中显示我的名字app
@app.route('/user/<name>') def user(name): return '<h1>Hello, {!r}</h1>'.format(name)
<name>
部分是可变部分,name将做为参数传递给视图函数。此部分能够指定name 的类型,如@app.route('/user/<int:age>')
可指定参数类型
可指定的类型有int,float,path(路径标识)框架
@app.route('/', methods=['GET', 'POST']) def index(): pass
当网页须要处理表单等请求时,须要添加methods,使得视图函数可以处理http请求。methods中的参数包括了Http协议中定义的5种动做。
from flask import make_request @app.route('/'): response = make_request("<h1>Cookie</h1>") response.set_cookie('answer','42') return response
响应处理中很重要的一部分是处理Http协议的状态码。Flask默认状态码是200。而返回特殊状态码可在返回值中添加,代码以下:
@app.route('/') def index(): return "<h1>Bad Request</h1>", 400 #返回特殊状态码
?
后的键值对由flask提供request对象处理。假设URL为127.0.0.1:5000?page=1
from flask import request @app.route('/', methods=['GET']) def index(): page = request.args.get('page', type=int)
在浏览网页时,可能会遇到一些错误,flask提供abort函数抛出错误,而抛出的异常会直接返回给Web服务器。咱们也能够自定义处理这些异常。代码以下:
from flask import abort @app.route('/') def index(): abort(404) #抛出404异常 @app.errorhandler(404) def page_not_found(error): # 自定义处理异常 return 'This page does not exist', 404
请求钩子
是指在请求以前或以后所作的处理函数
函数名 | 功能 |
---|---|
before_first_request | 在处理第一个请求以前执行 |
before_request | 每次请求以前执行 |
after_request | 无异常,每次请求以后执行 |
teardown_request | 即便异常,也在请求以后执行 |
请求钩子函数与视图函数之间经过g变量共享数据。
Q1:如何调试Web应用程序?
Q2:如何评价Web应用程序的性能?
Q3:Web应用程序如何作单元测试?
《Flask Web 开发》SegmentFault系列文章 - 做者只录入了前七章内容,未涉及实例开发部分
《Flask Web 开发》中文版 - 建议入手第二版
《Flask Web 开发》做者Blog - 书中有任何疑问能够在文章中搜索