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)

 

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