0902自我总结
Django 与drf 源码视图解析
一.原生Django CBV 源码分析:View
"""
1)as_view()是入口,得到view函数地址
2)请求来了调用view函数,内部调用dispatch函数完成请求分发
3)dispatch函数将请求方式映射成视图类的同名方法,完成请求的处理,得到相应
4)再将相应的结果一层层返回
"""
二.drf CBV 源码分析:APIView
"""
1)as_view()是入口,得到view函数地址,在范围view函数地址时局部禁用csrf认证
2)请求来了调用view函数,内部调用(APIView类的)dispatch函数完成请求分发
3)dispatch函数 二次封装request、完成三大认证后,再将请求方式映射成视图类的同名方法,完成请求的处理,得到相应,再对相应做渲染处理
4)再将相应的结果一层层返回
"""
三.APIView做的处理
-
as_view : 就干了一件事,禁用csrf认证
-
dispatch :
四.drf 的局部渲染和全局渲染
通过看了源码我们对于渲染内容是JSONRenderer 还是BrowsableAPIRenderer
JSONRenderer与BrowsableAPIRenderer的导入
from rest_framework.renderers import JSONRenderer from rest_framework.renderers import BrowsableAPIRenderer
-
局部设置
- 在我们定义基础APIView的类添加
renderer_classes = [JSONRenderer] 这样网页就不会出现渲染只显示js数据
例如
class UserAPIView(APIView):
renderer_classes = [JSONRenderer]
def get(self,request,*args,**kwargs):
print(request.query_params)
data = {
'status': 0,'msg': 'get ok','results': [],'token': '123.12321.231'
}
return Response(
data=data,status=status.HTTP_200_OK,headers={'Token': '123as.masd21.asd213sd'},content_type='application/json' # 默认就是application/json
)
-
全局设置在setting
# drf配置
REST_FRAMEWORK = {
# 响应的渲染模块
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer','rest_framework.renderers.BrowsableAPIRenderer',],'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',# 'application/json'
'rest_framework.parsers.FormParser',# 'application/x-www-form-urlencoded'
'rest_framework.parsers.MultiPartParser' # multipart/form-data
],}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|