flask的CBV
CBV书写案例
from flask import Flask app=Flask(__name__) #FBA @app.route("/") def index(): return "200 OK" #CBV from flask import views class Login(views.MethodView): def get(self): return "I am Get" def post(self): pass def mcwZidingyi(self): pass app.add_url_rule("/login", endpoint="my_login", view_func=Login.as_view(name="LoginLogin"), methods=["GET","POST"] ) if __name__ == '__main__': app.run("0.0.0.0",9527)
CBV详解
FBV视图函数的路由是route方法,而route方法实际上是(app对象)调用add_url_rule()方法。所以CBV添加路由的方式可以直接使用对象点add_url_rule()。第一个参数是路径,第二个参数是别名,第三个是类中的某个函数(方法) 后面的是字典类参数接收
所以CBV视图类写法如下:
导入views,定义类并继承views.MethodView。(MethodView又继承MethodViewType, View)。
定义get,post等方法,里面写对应方法的业务逻辑,并返回响应
视图类添加url路由。flask对象点添加url规则。参数中指定请求路径,endpoint别名,指定视图函数,视图函数是对应的类点as_view,里面有个name参数必填,起个名字
这样就写好了,在浏览器上访问
还可以换行并指定请求参数
def add_url_rule( self, rule, endpoint=None, view_func=None, provide_automatic_options=None, **options ):
CBV使用befor_request不影响(中间件效果,装饰器效果)
这个decoraters是不需要的,多写了
这个方法的执行跟视图函数还是视图类没有关系,是一样的。它们只跟请求有关系
from flask import Flask app=Flask(__name__) # @app.before_request # def is_login(): # print("是否登录,进入视图函数前") # @app.after_request # def login_ok(res): # return res def zhuanshiqi(func): def inner(): print("前") res=func() print("前") return res return inner from flask import views class Login(views.MethodView): decoraters=[zhuanshiqi] def get(self): print("已经登录了,进入了视图函数") return "I am Get" def post(self): pass def mcwZidingyi(self): pass app.add_url_rule("/login", endpoint="my_login", view_func=Login.as_view(name="LoginLogin"), methods=["GET","POST"] ) if __name__ == '__main__': app.run("0.0.0.0",9527)