国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

python - django源碼探究,as_view()的具體分發過程?

瀏覽:114日期:2022-07-28 15:16:26

問題描述

最近在學習django的類視圖,就打開源碼學習下,但是對基類View的as_view方法不太理解,先把源碼貼上來:

@classonlymethod def as_view(cls, **initkwargs):'''Main entry point for a request-response process.'''for key in initkwargs: if key in cls.http_method_names:raise TypeError('You tried to pass in the %s method name as a ''keyword argument to %s(). Don’t do that.'% (key, cls.__name__)) if not hasattr(cls, key):raise TypeError('%s() received an invalid keyword %r. as_view ''only accepts arguments that are already ''attributes of the class.' % (cls.__name__, key))def view(request, *args, **kwargs): self = cls(**initkwargs) if hasattr(self, ’get’) and not hasattr(self, ’head’):self.head = self.get self.request = request self.args = args self.kwargs = kwargs return self.dispatch(request, *args, **kwargs)view.view_class = clsview.view_initkwargs = initkwargs# take name and docstring from classupdate_wrapper(view, cls, updated=())# and possible attributes set by decorators# like csrf_exempt from dispatchupdate_wrapper(view, cls.dispatch, assigned=())return view

因為最后涉及View的另外的一個方法dispatch,我也貼出這個方法源碼:

def dispatch(self, request, *args, **kwargs):# Try to dispatch to the right method; if a method doesn’t exist,# defer to the error handler. Also defer to the error handler if the# request method isn’t on the approved list.if request.method.lower() in self.http_method_names: handler = getattr(self, request.method.lower(), self.http_method_not_allowed)else: handler = self.http_method_not_allowedreturn handler(request, *args, **kwargs)

當類視圖調用as_view方法時,會把請求時的request方法自動對應到相應的類方法上,比如request的get方法對應到類視圖的get方法。

但是我看完源碼的理解是:as_view僅僅能自動對應get和post(具體的request方法在類屬性當中有個列表:http_method_names = [’get’, ’post’, ’put’, ’patch’, ’delete’, ’head’, ’options’, ’trace’])等方法,如果我在類視圖定義了自己的方法,那as_view并不能把我自定義的方法對應起來

但是,同樣是類視圖,ListView當中卻有get_queryset方法,那ListView在調用as_view方法時會自動調用這個get_queryset方法嗎(它并不是request的方法是吧?)?

代碼哪里提到了這個過程呢?

望大神指教~抱拳

問題解答

回答1:

dispath方法里就是根據request的方法尋找class view對應的函數處理:handler = getattr(self, request.method.lower(), self.http_method_not_allowed)

ListView中的get_queryset方法是別的函數調用的

標簽: Python 編程
主站蜘蛛池模板: 三级视频网站在线观看播放 | 最新69成人精品毛片 | 深夜福利视频大全在线观看 | 成人久久伊人精品伊人 | 成人影院在线免费观看 | 国内精品一区二区2021在线 | 成人性一级视频在线观看 | 一级片免费观看视频 | 免费国产不卡午夜福在线观看 | 性成人动作片在线看 | 国产精品久久久久免费a∨ 国产精品久久久久免费视频 | 日韩欧美一区二区不卡看片 | 亚洲在成人网在线看 | 免费男女乱淫真视频播放 | 久久伊人男人的天堂网站 | 中文字幕免费观看 | 成人精品视频一区二区在线 | 看日本真人一一级特黄毛片 | 欧美色视频在线观看 | 呦女精品视频 | 情侣偷偷看的羞羞视频网站 | 久色精品 | 波多野结衣在线视频观看 | 免费区一级欧美毛片 | 国产一区二区不卡 | 国产一级片免费看 | 欧美成人全部费免网站 | 国产自产v一区二区三区c | 欧美一级俄罗斯黄毛片 | 精品国产日韩亚洲一区在线 | 午夜主播福利视频在线观看 | 国产精品久久久久毛片真精品 | www.久操| 中文字幕有码在线视频 | 在线亚洲精品自拍 | 欧美一级欧美一级高清 | 亚洲美女视频网 | 国产精品香蕉一区二区三区 | 亚洲综合国产精品 | 久久国产一片免费观看 | 在线视频一区二区三区在线播放 |