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对象获取值在这里插入图片描述

相关推荐

  1. 分析前端请求“Unsupported Media Type”问题

    2024-05-02 07:00:03       14 阅读
  2. 常见请求方法状态码分析

    2024-05-02 07:00:03       9 阅读
  3. flask服务如何request获取请求headers信息

    2024-05-02 07:00:03       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-02 07:00:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-02 07:00:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-02 07:00:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-02 07:00:03       20 阅读

热门阅读

  1. Redis简介

    2024-05-02 07:00:03       10 阅读
  2. vue和react这两大前端框架的优缺点对比

    2024-05-02 07:00:03       12 阅读
  3. SSL通信、证书认证原理和失败原因

    2024-05-02 07:00:03       13 阅读
  4. 设计模式-02 设计模式-接口隔离原则案例分析

    2024-05-02 07:00:03       12 阅读
  5. Ajax从入门到精通

    2024-05-02 07:00:03       12 阅读
  6. React 中使用 TS

    2024-05-02 07:00:03       14 阅读
  7. 力扣700,二叉搜索树中的搜索

    2024-05-02 07:00:03       13 阅读
  8. 【html知识】用html写一个简单的个人网页

    2024-05-02 07:00:03       38 阅读
  9. PostgreSQL的pg_archivecleanup工具

    2024-05-02 07:00:03       16 阅读
  10. 前端安全:XSS和CSRF攻击的防御策略

    2024-05-02 07:00:03       16 阅读