Steam新一週銷量榜 《生化變種》登頂、《GTA5》第七
阿新 • • 發佈:2021-05-31
django版本:2.2.22 # 你自己不要修改原始碼 出了bug很難搞 # 突破口urls.py url(r'^login/',views.MyLogin.as_view()) """ 函式名/方法名 加括號執行優先順序最高 猜測 as_view() 要麼是被@staticmethon修飾的靜態方法 要麼是被@classmethod修飾的類方法 正確 @classonlymethod def as_view(cls, **initkwargs): pass """ @classonlymethod def as_view(cls,**initkwargs): """ cls就是我們自己寫的類 MyCBV Main entry point for a request-response process. """ def view(request, *args, **kwargs): self = cls(**initkwargs) # cls是我們自己寫的類 # self = MyLogin(**initkwargs) 產生一個我們自己寫的類的物件return self.dispatch(request, *args, **kwargs) """ 以後你們會經常看原始碼 但是在看python原始碼的時候 一定要時刻提醒自己面向物件方法查詢順序 先從物件自己找 再去產生物件的類裡面找 之後再去父類裡面找 """ """ 總結:看原始碼只要看到了self點一個東西 一定要問你自己當前這個self到底是誰""" return view # CBV的精髓 def dispatch(self, request, *args, **kwargs): # 獲取當前請求的小寫格式 然後對比當前請求方式是否合法 # get請求為例 # post請求 if request.method.lower() in self.http_method_names: handler = getattr(self, request.method.lower(), self.http_method_not_allowed) """ 反射:通過字串來操作物件的屬性或方法 handler = getattr(自己寫的類產生的物件,'get',當找不到get屬性或者方法的時候就會用第三個引數) handler = 我們自己寫的類裡面的get方法 """ else: handler = self.http_method_not_allowed return handler(request, *args, **kwargs) """ 自動呼叫get方法 """ # 要求:掌握到不看原始碼也能夠描述出CBV的內部執行流程(******)