1. 视图函数
@app.route('/hello') def hello(): return 'hello'
通过route装饰器,将一个url /hello 与 函数hello 关联在一起,我们称这个函数就是视图函数。请注意,视图函数并不是python中的概念,而是flask中的一个概念,一个视图函数用来处理一个请求,最终返回数据。
基于函数的视图是最简单便捷的用法,出于设计模式的考虑,如果能用类来处理请求,某些情况下,系统架构会更加合理,更易于扩展。
flask提供了两个视图类,我们可以继承这两个类中的一个,实现自己的类视图
1.1 flask.views.View
继承flask.views.View,必须实现dispatch_request方法以处理请求,下面是一个简单的示例;
from 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')) if __name__ == '__main__': app.run(debug=True)
as_view方法返回的是一个View类里的一个方法,类里的方法本质上仍然是函数, methods 规定这个视图类可以处理的请求方法。
这样设计,我们可以把处理请求的相关代码抽象成不同的方法写在UserView类里,这样便于管理
1.2 flask.views.MethodView
个人更喜欢MethodView,View类里,如果一个资源支持多种请求方式,get,post,put,delete等等,那么你不得不在dispatch_request方法里根据request.method对他们进行区分,然后调用不同的处理方法进行响应,对各种请求的路由是由你自己完成的。
而MethodView则帮你做好了路由,不同的请求,会被路由到不同的处理方法上
from flask import Flask, request from flask.views import MethodView app = Flask(__name__) class UserView(MethodView): def get(self): return "收到get请求" def post(self): return '收到post请求' app.add_url_rule('/users', view_func=UserView.as_view('users')) if __name__ == '__main__': app.run(debug=True)
在浏览器中输入127.0.0.1:5000/users,浏览器页面显示:收到get请求