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

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

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

1 drf项目

pip install django
pip install djangorestframework
1.1 核心配置
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 路由
from django.urls import path
from api import views

urlpatterns = [
    path('users/', views.UserView.as_view()),
]
1.3 视图
from rest_framework.views import APIView
from rest_framework.response import Response


class 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.mfbz.cn/a/588405.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

神经网络中常见的激活函数:理解与实践

神经网络中常见的激活函数:理解与实践 在神经网络中,激活函数是一个非常重要的组成部分,它为神经元引入了非线性特性,使得神经网络可以拟合各种复杂的函数关系。本文将介绍9种常见的激活函数,包括它们的概述、公式以及…

《百图解码支付系统设计与实现》电子书_V20240503

《百图解码支付系统设计与实现》这本书的底稿已经完成一半,从2023.12.24发布专栏第一篇文章“跟着图走,学支付:在线支付系统设计的图解教程”算起,陆续写了30来篇支付相关的干货。 本书是我的专栏《百图解码支付系统设计与实现》…

基于Spring Boot的校园闲置物品交易网站设计与实现

基于Spring Boot的校园闲置物品交易网站设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 系统功能界面图,在系统首页可以查看…

springboot项目组合定时器schedule注解实现定时任务

springboot项目组合定时器schedule注解实现定时任务! 创建好springboot项目后,需要在启动类上增加注解开启定时器任务 下图所示: 增加这个注解,启动项目, package com.example.scheduledemo.util;import org.springf…

C++中的异常

目录 1.C语言传统的处理错误的方式 2. C异常概念 3. 异常的使用 3.1 异常的抛出和捕获 3.2 异常的重新抛出 3.3异常安全 3.4 异常规范 4.自定义异常体系 5.C标准库的异常体系 6.异常的优缺点 7.func() throw();的方式规范化 1.C语言传统的处理…

C语言字符串(0基础到深入剖析)---字符串系列合集(函数+指针+数组)

前言 本篇旨在帮助不了解字符串或者逻辑梳理不够透彻的伙伴们理出一条脉络。选择能看懂的部分即可,建议收藏,后期学习完C语言方便回顾。 适用范围:0基础C语言(刚学字符串)- 学过函数 - 学过指针 ---大致了解了数据内…

Centos7 安装Git、使用

Centos7 安装Git 一、安装步骤1.1 查看版本1.2 卸载1.3 安装 二、创建仓库2.1 新增仓库2.2 新增配置项 三、管理文件3.1 文件创建3.2 文件修改、add、commit3.3 tree结构探索 四、分支4.1 创建分支:4.2 查看分支4.3 切换分支4.4 删除分支4.5 合并冲突 一、安装步骤 …

FusionMamba: Efficient Image Fusion with State Space Model【文献阅读】

论文:FusionMamba:一种基于SSM的有效图像融合方法 arXiv:https://arxiv.org/abs/2404.07932 作者单位:中国科学院自动化研究所、模式识别重点实验室、电子科技大学 推荐阅读:深入浅出一文图解Vision Mamba Abstract 图…

3.自动驾驶-局部路径规划

1. 规划planning 2. 局部路径规划模块实现-模块外围:输入 3. 局部路径规划模块实现模块外围:输出 4. 控制control 5. 系统分类 6 系统分类

C 认识指针

目录 一、取地址操作符(&) 二、解引用操作符(*) 三、指针变量 1、 指针变量的大小 2、 指针变量类型的意义 2.1 指针的解引用 2.2 指针 - 整数 2.3 调试解决疑惑 认识指针,指针比较害羞内敛,我们…

自定义SpringBoot的starter

案例需求:自定义redis-stater。要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean。 实现步骤: 1、创建redis-spring-boot-autoconfigure模块 2、创建redis-spring-boot-starter模块,依赖redis-spring-boot-autoconfigure的…

Android 文件传输

经常写adb命令传文件,结果发现Android studio有自带的文件管理器,可以上传下载文件。

程序包的创建

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 前面很多范例中都用到的 dbms output.put_line 实际上就是一个典型的程序包应用, 其中 dbms output是程序包的名称,put_line 是该程序包中定义的一个…

碳纤维复合材料的纳米纤维膜

碳纤维复合材料的纳米纤维膜是一种具有良好性能和应用前景的新材料。以下是关于这种材料的详细介绍: 制备方法:碳纤维复合材料的纳米纤维膜可以通过多种方法制备,包括化学气相沉积法、固相合成法、模板法等。其中,化学气相沉积法是…

十三、大模型项目部署与交付

1 硬件选型 CUDA 核心和 Tensor 核心 CUDA 核心:是NVIDIA开发的并行计算平台和编程模型,用于GPU上的能用计算,可做很多的工作。应用在游戏、图形渲染、天气预测和电影特效Tensor 核心:张量核心,专门设计用于深度学习…

YOLOv5入门(四)训练自己的目标检测模型

前言 通过前面几篇文章,已经完成数据集制作和环境配置(服务器),接下来将继续实践如何开始训练自己数据集~ 往期回顾 YOLOv5入门(一)利用Labelimg标注自己数据集 YOLOv5入门(二)处…

【PyTorch与深度学习】2、PyTorch张量的运算API(上)

课程地址 最近做实验发现自己还是基础框架上掌握得不好,于是开始重学一遍PyTorch框架,这个是课程笔记,这个课还是讲的简略,我半小时的课听了一个半小时。 1. 张量 1.1 张量操作 (1)chunk:将一…

华为手机ip地址怎么切换

随着移动互联网的普及,IP地址成为了我们手机上网的重要标识。然而,在某些情况下,我们可能需要切换手机的IP地址,以更好地保护个人隐私、访问特定地区的内容或服务,或者出于其他网络需求。华为手机作为市场上的热门品牌…

Kafka客户端工具:Offset Explorer 使用指南

Kafka作为一个分布式流处理平台,在大数据处理和实时数据流应用中扮演着至关重要的角色。管理Kafka的topics及其offsets对于维护系统稳定性和数据一致性至关重要。Offset Explorer是一个强大的桌面应用程序,它使得管理和监控Kafka集群变得简单直观。本文将…

2023 广东省大学生程序设计竞赛(部分题解)

目录 A - Programming Contest B - Base Station Construction C - Trading D - New Houses E - New but Nostalgic Problem I - Path Planning K - Peg Solitaire A - Programming Contest 签到题:直接模拟 直接按照题目意思模拟即可,为了好去…
最新文章