flask学习3

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章