ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

05 DRF请求生命周期

2020-12-01 14:03:36  阅读:241  来源: 互联网

标签:生命周期 05 APIView 视图 django dispatch import DRF view


DRF请求生命周期

  1. 根据应用中urls.py,走as_view方法,但是视图类没有该方法,所以请求走的是APIView的as_view方法
  2. 在APIView的as_view调用父类(django原生View)的as_view,同时还禁用了 csrf 认证
  3. 在父类(django原生View)的as_view中dispatch方法请求走的又是APIView的dispatch
    因为APIView也可以走dispatch,视图类是先继承APIView,APIView中没有再去原生View中
  4. 完成任务分发,交给视图类的请求函数处理,得到请求的响应结果,返回给前台,所以以后直接就从APIView的dispatch入口看源码

前期准备

#路由层 urls.py:
from django.conf.urls import url,include
from django.contrib import admin
from . import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^test/', views.test.as_view()),
]  

#视图层 views.py
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response

class test(APIView):
    def get(self,reqeust,*args,**kwargs):
        return Response('drf get ok')
    def post(self,request,*args,**kwargs):
        return Response('drf post ok')

源码分析

  1. 根据应用中urls.py,走as_view方法,但是视图类没有该方法,所以请求走的是APIView的as_view方法

  2. view = super().as_view(**initkwargs)调用父类的as_view 也就是django原生的base.py中的as_view
    之后再此基础上增加了 return csrf_exempt(view) 继承了APIView的视图类,会禁用csrf认证,这样就需要在settings中注释

  3. 在第二步是调用父类的as_view方法,此方法中有个关键的分发方法return self.dispatch(request, *args, kwargs) (入口:view = super().as_view(initkwargs))

  4. APIView中重写了dispatch方法

  5. 完成任务方法交给视图类的请求函数处理,得到请求的相应结果,返回给前台

标签:生命周期,05,APIView,视图,django,dispatch,import,DRF,view
来源: https://www.cnblogs.com/LYPZX/p/14045084.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有