Flask[相识]
路由规则管理
一般情况有两种添加路由规则的方式
1、使用route添加路由规则
1 |
|
2、使用add_url_rule添加路由规则
1 | def add_rule(): |
两种方式的结果是相同的,route装饰器中也是调用了 add_url_rule方法添加路由规则。
更深层的学习可以参考todo。
设置method
一个URL可以用多种不同的方法请求,创建路由规则时,我们可以指定这个URL支持哪些请求方法。
1 |
|
在route装饰器中设置methods参数来决定支持的请求方法,不设置默认仅支持GET请求。
users函数既要处理GET请求,又要处理POST请求,那么如何区分它们呢? 这就要用到请求对象request
通过获取requst的method属性,即可得到请求的方法。
1 | from flask import Flask, request |
Flask视图
到底什么是视图呢?
视图函数
通过route装饰器,将url/hello
与 函数hello
关联在一起,我们称这个函数就是视图函数。
1 |
|
一个视图函数用来处理一个请求,最终返回数据。
视图类
flask提供了两个两个视图类,我们可以继承这两个类中的一个,实现自己的类视图。
flask.views.View
继承flask.views.View,必须实现dispatch_request方法以处理请求,下面是一个简单的示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18from flask import Flask, request
from flask.views import View
app = Flask(__name__)
class UserView(View):
methods = ['GET']
def dispatch_request(self):
print(request.method)
return 'ok'
app.add_url_rule('/users', view_func=UserView.as_view('users')) #将函数绑定到Userview
# userrView类中并没有名为 users 的方法,那么这个字符串参数意义何在呢?
if __name__ == '__main__':
app.run(debug=True)as_view方法返回的是一个View类里的一个方法,类里的方法本质上仍然是函数, methods 规定这个视图类可以处理的请求方法。
这样设计,我们可以把处理请求的相关代码抽象成不同的方法写在UserView类里,这样便于管理。
flask.views.MethodView
View类里,如果一个资源支持多种请求方式,get,post,put,delete等等,那么你不得不在dispatch_request方法里根据request.method对他们进行区分,然后调用不同的处理方法进行响应,对各种请求的路由是由你自己完成的。
MethodView会自动的为视图类做好路由,不同的请求,会被路由到不同的处理方法上
1 | from flask import Flask, request |
此设计与tornado的处理方式相同,MethodView是View的子类,它实现了dispatch_request方法,若请求的get请求,则路由到get方法。