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)