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()