DRF中的请求入口分析及request对象分析

server/2024/12/22 14:20:09/

DRF中的请求入口分析及request对象分析

django restframework框架是在django的基础上又给我们提供了很多方便的功能,让我们可以更便捷基于django开发restful API

1 drf项目

pip install django
pip install djangorestframework
1.1 核心配置
python">INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',"app01.apps.App01Config",'rest_framework',
]
1.2 路由
python">from django.urls import path
from api import viewsurlpatterns = [path('users/', views.UserView.as_view()),
]
1.3 视图
python">from rest_framework.views import APIView
from rest_framework.response import Responseclass UserView(APIView):def get(self, request):return Response("...")
1.4 drf请求入口分析

在这里插入图片描述

3.2 request和参数

drf中的request和django中的request不一样,实际上是对django的request参数进行再封装

在这里插入图片描述

可以看到,在Django中request是WSGIRequest对象;而在drf中的request是rest_framework.request.Request对象

3.2.1 参数
  • 普通路由通过self.kwargs可以拿到请求的路由中传递的参数

    在这里插入图片描述

  • 含正则表达式的路由通过self.args拿到路由中传递的参数

    在这里插入图片描述

3.2.2 request对象
1.源码分析

在路由入口dispatch中,有一个函数initialize_request(request, *args, **kwargs)

在这里插入图片描述

再来看函数initialize_request(request, *args, **kwargs)具体干了些啥

这个函数将原来的Django中的request当作参数传入,返回的其实也是一个Request对象

在这里插入图片描述

而在Request对象源码中,将本来的Django的request赋值为_request

在这里插入图片描述

同时在源码中,有一个__getattr__方法,这个方法的作用是,如果我访问了类中一个不存在的变量时,就会执行这个__getattr__方法,并返回

在这里插入图片描述

也就是说,我可以通过request._request.xxx获取到原本django中的request对象里面的值,

也可以通过request.xxx同时获取到drf和django两者request对象里面的值

request.xxx获取到django中request对象里面的值的原理是:当访问不到时,会执行__getattr__方法,通过反射的方法,此时相当于执行request._request.xxx

2.request对象获取值在这里插入图片描述

http://www.ppmy.cn/server/33341.html

相关文章

Flask教程3:jinja2模板引擎

文章目录 模板的导入与使用 模板的导入与使用 Flask通过render_template来实现模板的渲染,要使用这个方法,我们需要导入from flask import rander_template,模板中注释需放在{# #}中 模板的第一个参数为指定的模板文件名称,如自定…

用LangChain打造一个可以管理日程的智能助手

众所周知,GPT可以认为是一个离线的软件的,对于一些实时性有要求的功能是完全不行,比如实时信息检索,再比如我们今天要实现个一个日程管理的功能,这个功能你纯依赖于ChatGPT或者其他大语言模型(后文简称llm&…

【论文阅读笔记】Order Matters(AAAI 20)

个人博客地址 注:部分内容参考自GPT生成的内容 论文笔记:Order Matters(AAAI 20) 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…

解决layui的bug 在layui tree 组件中 禁用选中父节点后自动选中子节点功能

最近做权限管理后台,用了layui tree 组件,发现选中了父节点后,自动选中了子节点。不满足现实业务需求。所以微调了下源代码。 在用树形组件中,在用文档中 tree.setChecked(demoId, [2, 3]); //批量勾选 id 为 2、3 的节点 用这句…

【Spring 】Spring MVC 入门Ⅱ

Spring MVC 入门Ⅱ 一、接收Cookie / Session 这两者都是用来保存用户信息的,但不同的是: Cookie存在客户端 Session存在服务器 Session产生时会生成一个唯一性的SessionID,这个SessionID可以用于匹配Session和Cookie SessionID可以在Cooki…

Linux——基础IO

Linux——基础IO 文章目录 Linux——基础IO一、概念引入二、文件系统调用接口2.1 C语言中文件接口2.2 系统文件接口2.2.1 参数介绍2.2.2 简易调用系统接口 2.3 文件读写接口 三、文件描述符——fd3.1 进程与文件的联系3.2 三个默认打开的文件3.3 VFS虚拟文件系统3.4 理解struct…

HCIP第一节

一。网络类型: 1.点到点:在一个网络内只能存在两个物理节点 MA(BMN,NBMN)-多路访问:在一个网段内物理节点的数量不受限制(在一个网段内可以放置多个物理节点,同时该范围内可以实施广播泛洪机制&#xff0…

SX1301 1MHz、2A升压电流模式PWM转换器芯片IC

一般说明 S1301是直流-直流之间的a电流。安装Wμ电路内置0.25Ω功率MOSFET,使此稳压器高功率效率。内部补偿网络还可最大限度地减少多达6个外部元件数量。误差放大器的同相输入端接0.6V精密基准电压,内部具有软启动功能,可以减小浪涌电…