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