Django与drf 源码视图解析
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
:- 1)二次封装request
- 2)三大认证
四.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 )
- 在我们定义基础APIView的类添加
-
全局设置在
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 ], }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理