第五章、views解讀

前言

前一章,我們已經(jīng)說明了django 是如何從 django 框架處理,走到 rest_framework 的處理的,這一章就要看一下,走到 rest_framework 框架后,調(diào)用的 dispatch 函數(shù),到底做了什么東西,這里要揭曉了。

APIView

def dispatch(self, request, *args, **kwargs):
        """
        `.dispatch()` is pretty much the same as Django's regular dispatch,
        but with extra hooks for startup, finalize, and exception handling.
        """
        self.args = args
        self.kwargs = kwargs
        request = self.initialize_request(request, *args, **kwargs)
        self.request = request
        self.headers = self.default_response_headers  # deprecate?

        try:
            self.initial(request, *args, **kwargs)
            # Get the appropriate handler method
            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_allowed

            response = handler(request, *args, **kwargs)

        except Exception as exc:
            response = self.handle_exception(exc)

        self.response = self.finalize_response(request, response, *args, **kwargs)
        return self.response

dispatch 函數(shù)中,先是將 request 對象更換為 rest_framework中的 Request 對象,又做了一個initial初始化操作,然后從 request 的 method 方法,來查找對應(yīng)的處理函數(shù),最后再返回 reponse。這里我們有兩個注意點(diǎn),一個是我們都有哪些方法,這些方法是怎么賦值的?這個問題,我們將跟 Router 那一章最后的 method map 問題,一起探討明白;二是我們調(diào)用這個方法,又走到了哪些流程,我們將在第六章、method 講解清楚后,繼續(xù)我們這個流程的分析。

http 方法所對應(yīng)的函數(shù)處理

如果你去第六章看了 method 的詳解,那么你應(yīng)該清楚了,默認(rèn)情況下,http 方法所對應(yīng)的函數(shù)處理是固定的,某個 url,比如get 方法,對應(yīng)了 list 函數(shù),post 方法,對應(yīng)了create 函數(shù)。我們看一下 list 函數(shù)以及 create 函數(shù)都做了什么。
我們在 views.py 與 viewset.py 中,去找 list 函數(shù),create 函數(shù),但是這里貌似并未提供這些函數(shù),沒辦法,我只能繼續(xù),找例子中,我用的是哪些類

class UserViewSet(ModelViewSet):

好,那我們?nèi)フ?ModelViewSet
在 viewset解讀處

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,660評論 19 139
  • Django: csrf防御機(jī)制 csrf攻擊過程 1.用戶C打開瀏覽器,訪問受信任網(wǎng)站A,輸入用戶名和密碼請求登...
    lijun_m閱讀 1,151評論 0 0
  • 一說到REST,我想大家的第一反應(yīng)就是“啊,就是那種前后臺通信方式?!钡窃谝笤敿?xì)講述它所提出的各個約束,以及如...
    時待吾閱讀 3,601評論 0 19
  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務(wù) 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,198評論 1 180
  • 【按】寶雞市第三次質(zhì)量檢測試題的詩歌鑒賞選擇了杜牧的《旅宿》,因?qū)Υ鸢傅恼Z言組織工作不滿意,我就廣泛地搜索材料,翻...
    東籬文集閱讀 1,814評論 0 1

友情鏈接更多精彩內(nèi)容