两天学会flask(二)---视图函数(5分钟)

发布时间 2023-04-21 15:48:05作者: 家乐福的搬砖日常

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请求