简单来说:视图就是用于接收请求并返回响应内容。
1.视图函数
@app.route('/hello')
def hello():
return 'hello'
flask提供了两个两个视图类,我们可以继承这两个类中的一个,实现自己的视图类。
2.flask.views.View
as_view方法返回的是一个View类里的一个方法,类里的方法本质上仍然是函数, methods 规定这个视图类可以处理的请求方法。
from flask import Flask,redirect,url_for,request
from flask.views import View
app = Flask(__name__)
class UserView(View):
#只接受GET和POST请求
methods = ['GET','POST']
def dispatch_request(self):
if request.method == 'GET':
return '执行了users的get请求'
if request.method == 'POST':
return '执行users的post请求'
return '请求ok'
app.add_url_rule('/users', view_func=UserView.as_view('users'))
if __name__ == '__main__':
app.run(host="127.0.0.1", port=8080, debug=True)
3.flask.views.MethodView
相比较views.View,个人更推荐MethodView,在View类里,如果一个资源支持多种请求方式,get,post,put,delete等等,那么你不得不在dispatch_request方法里根据request.method对他们进行区分判断。而MethodView则帮你做好了路由,不同的请求,会被路由到不同的处理方法上。
from flask import Flask,redirect,url_for,request
from flask.views import View,MethodView
app = Flask(__name__)
class UserView(MethodView):
def get(self):
return "执行users的get请求"
def post(self):
return '执行users的post请求'
app.add_url_rule('/users', view_func=UserView.as_view('users'))
if __name__ == '__main__':
app.run(host="127.0.0.1", port=8080, debug=True)
MethodView是View的子类,它实现了dispatch_request方法,如果请求的get请求,则路由到get方法,就是这么简单。