色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

問題描述

最近在學(xué)習(xí)django的類視圖,就打開源碼學(xué)習(xí)下,但是對(duì)基類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

因?yàn)樽詈笊婕癡iew的另外的一個(gè)方法dispatch,我也貼出這個(gè)方法源碼:

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)

當(dāng)類視圖調(diào)用as_view方法時(shí),會(huì)把請(qǐng)求時(shí)的request方法自動(dòng)對(duì)應(yīng)到相應(yīng)的類方法上,比如request的get方法對(duì)應(yīng)到類視圖的get方法。

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

但是,同樣是類視圖,ListView當(dāng)中卻有g(shù)et_queryset方法,那ListView在調(diào)用as_view方法時(shí)會(huì)自動(dòng)調(diào)用這個(gè)get_queryset方法嗎(它并不是request的方法是吧?)?

代碼哪里提到了這個(gè)過程呢?

望大神指教~抱拳

問題解答

回答1:

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

ListView中的get_queryset方法是別的函數(shù)調(diào)用的

標(biāo)簽: Python 編程
主站蜘蛛池模板: 97久草| 成人a毛片久久免费播放 | 日本美女视频韩国视频网站免费 | 亚洲一区二区三区一品精 | 中文字幕亚洲一区二区三区 | 亚洲欧美日韩久久精品第一区 | 好看毛片 | 国产伦精品一区二区三区无广告 | 免费看91毛片 | 91视频国产91久久久 | 成人网视频在线观看免费 | 老色歌uuu26| 91年精品国产福利线观看久久 | 久久久久久久亚洲精品一区 | 波多野结衣在线播放 | 国产二区自拍 | 成人软件18免费网站 | 成人黄网18免费观看的网站 | 久久这里只有精品免费视频 | 国产三级视频在线播放 | 中文字幕乱码无线码在线 | 欧美国产日本高清不卡 | 国内精品久久久久久久久久影视 | 国产高清精品久久久久久久 | 在线国产一区 | 九九精彩视频在线观看视频 | 亚洲成人第一 | 经典三级在线视频 | 日本欧美一级aaaaa毛片 | 国产日韩免费 | 日本a级特黄三级三级三级 日本a一级片 | 成年女人毛片 | 欧美日韩专区国产精品 | 国产精品青草久久久久福利99 | 91精品啪在线看国产网站 | 国产精品一级视频 | 99精品视频免费观看 | 精品一久久香蕉国产二月 | 日韩中文字幕精品久久 | 久久99这里只有精品国产 | 国产一区中文字幕在线观看 |