← 返回首页
Python3基础教程(八十五)
发表时间:2022-10-10 15:27:23
视图

简单来说:视图就是用于接收请求并返回响应内容。

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方法,就是这么简单。