Flask cbv

Flask的CBV写法

基础版

from flask import Flask,views
app = Flask(__name__)
app.debug = True

def auth(func):
    def inner(*args,**kwargs):
        print('before...')
        res = func(*args,**kwargs)
        print('after...')
        return res
    return inner

class IndexView(views.View):
    methods = ["GET","POST"]
    decorators = [auth,]  # 这个是给外面的响应添加装饰器
    # 这里名字必须是dispatch_request
    def dispatch_request(self):
        # print("ojbk")
        return "ojbk"

# 如果是cbv 路由必须用app.add_url_rule的方式写,这里的name和endpoint一样
# 如果as_view不传name,这所有返回的都是view函数对象,这样就会报错,所有人家必须要你传递参数
# 我们传递name="index"是给view的__name__改变名字。如果不传,我没有办法通过名字来找路由的映射关系,因为都是”view“
app.add_url_rule("/index",view_func=IndexView.as_view(name="index"))

if __name__ == '__main__':
    app.run()

常用版

from flask import Flask,views

app = Flask(__name__)
def auth(func):
    def inner(*args,**kwargs):
        print('before...')
        res = func(*args,**kwargs)
        print('after...')
        return res
    return inner

class Login(views.MethodView):
    methods = ["GET","POST"]  # 规定哪些请求方式可以请求我这个路由
    decorators = [auth, ]  #这个是给外面的响应添加装饰器
    def get(self):return "get"
    def post(self):
        return "post"

app.add_url_rule("/login",view_func=Login.as_view(name="login"))
# 如果我们继承了MethodView,他帮我们重写了dispatch_request方法,他给我们做了一个分发,通过请求,来执行不同的函数

if __name__ == '__main__':
    app.run()

 

posted @ 2020-03-19 23:00  Hank·Paul  阅读(154)  评论(0编辑  收藏  举报