首页 > 其他分享 >DRF之View和APIView

DRF之View和APIView

时间:2024-04-22 21:57:43浏览次数:23  
标签:APIView request Django 2.1 View DRF

【零】DRF在Django项目中的使用

【1】导入

# DRF需要使用pip install 安装
pip install djangorestframework
  • DRF(Django Rest Framework)是一个用于构建 Web API 的工具包,它是基于 Django 框架的一个第三方应用(app)
  • 在 Django 项目中,一个应用(app)通常是一个具有特定功能的模块,它包含了模型、视图、模板等组件,用于实现特定的功能或业务逻辑。

image-20240415161036714

【2】使用

  • 使用drf时,需要先在settings.py文件中进行注册app
# settings.py
INSTALLED_APPS = [
    ...
    'rest_framework'
]

【一】View

  • restful规范所需5个接口
    • 查询所有
    • 添加
    • 查询单条数据
    • 更新单条
    • 删除单条

【1】基于Django的View实现5个接口

image-20240415163008511

  • 预处理请求数据的装饰器代码

image-20240415170227132

  • 【注】该版本如果使用post请求,需要注释掉csrf中间件

【2】基于DRF.APIView + Response实现5个接口

  • 使用Django自带的View我们可以发现,其对请求数据的处理不够完善

  • 而在DRF中,其帮我们处理了请求数据,能够让我们可以通过【request.data】直接获取到三种编码格式处理后的数据

  • 【request.data】中的数据可能为【querydict】或【dict】对象

  • 代码预览

image-20240415173532313

【2.1】APIView源码分析

  • 视图类调用时,就是执行【as_view()】方法
  • 【as_view()】就是我们查看APIView源码的入口
【2.1.1】DRF的APIView的as_view()

image-20240415194225740

【2.1.2】Django的View的as_view()

image-20240415194314096

【2.1.3】DRF的APIView的dispatch()

image-20240415194408065

【2.1.3.1】包装新的request

image-20240415194516764

  • Request类实例化对象的__init__方法

image-20240415194531177

【2.1.4】APIView的request对象
  • APIView的request对象相较于django的request对象多了一些属性
  • 常用的(以下的reuqest均为APIView的request对象)
    • request.data:获取请求体中的数据,以QueryDict形式或Dict形式返回
    • request.query_params:与django的request对象中的.GET方法一致

image-20240415194652037

  • 当获取APIView的request对象中没有的属性时,将会触发__getattr__方法

image-20240415194936756

【2.1.5】源码存疑的地方
  • 如果再调用self.__getattribute__获取属性,好像没有什么必要,肯定是会报错的,为什么要多做一个异常捕获,然后再抛出一个异常呀

image-20240415195047878

标签:APIView,request,Django,2.1,View,DRF
From: https://www.cnblogs.com/Lea4ning/p/18151633

相关文章

  • DRF之序列化组件
    【二】序列化组件【1】序列化与反序列化的概念序列化(Serialization):将对象转换为可传输或可存储的格式的过程。在序列化过程中,对象的属性和数据被转换为一个字节流或字符串,以便在网络上传输或保存到文件中。常见的序列化格式包括JSON、XML、ProtocolBuffers等。序列化后的数......
  • 读《我和Labview》3.5-3.6路径和数据平化
    3.5路径3.5.1路径数据3.5.2相对路径3.5.3路径常量3.5.4路径与其他数据类型的转换3.6数据平化3.6.1数据平化至字符串3.6.2数据平化至XML3.6.3数据平化至JSON4图形化显示数据5条件结构和顺序结构6用户自定义控件7控件的局部变量和属性8按自己的喜好设置编程环境......
  • DRF之请求与响应
    【三】请求与响应【1】请求【1.1】Request对象def__init__(self,request,parsers=None,authenticators=None,negotiator=None,parser_context=None)关键字参数:-request(HttpRequest).原始请求实例。-parsers(list/tuple).用于解析请求内容......
  • DRF之View和APIView
    【零】DRF在Django项目中的使用【1】导入```shell#DRF需要使用pipinstall安装pipinstalldjangorestframework```DRF(DjangoRestFramework)是一个用于构建WebAPI的工具包,它是基于Django框架的一个第三方应用(app)在Django项目中,一个应用(app)通常是一个具有特定功......
  • DRF案例
    1反序列化更新,instance就传要修改的对象,保证修改完成defupdate(self,instance,validated_data):publish_id=validated_data.pop('publish')author_id=validated_data.pop('author')forkinvalidated_data:setattr(instance,k,valida......
  • drf中jwt应用
    第一步 在登录类中生成jwtclassLogin(MyException,APIView):defpost(self,request):user_obj=models.UserInfo.objects.filter(**request.data).first()ifnotuser_obj:returnResponse({"code":1001,"msg":"用户......
  • QML::ListView
    ListView1.0ListView基础使用方法//ListView01.qml1、通过Component定义Delegate2、通过ListModel定义mode,通过ListElement定义数据类型3、定义ListView,通过delegate和model属性绑定mode和DelegateimportQtQuick2.2importQtQuick.Controls1.2importQtQuick.Layout......
  • DRF之类视图详解介绍
    一、视图基类1、APIView想要使用APIView,需要先导入:fromrest_framework.viewsimportAPIViewAPIView继承了View,同时也进行了升级,APIView是适合前后端分离的,而View是适合前后端不分离的。View并没有对请求进行处理,而APIView会对请求进行处理,将请求体的JSON数据转成......
  • DRF之路由组件
    一、路由的写法1、原始写法(1)介绍是指手动编写路由规则的方式。使用path()函数或re_path()函数来定义路由规则,并将其与对应的视图函数或类关联起来。(2)示例假设有一个名为book的应用,它包含了一个处理图书列表的视图函数book_list,以及一个处理单个图书详情的视图函数book_de......
  • APIView类
    【一】APIView类的介绍【1】介绍​ DjangoRESTFramework(DRF)中的APIView类是一个非常重要的基类,用于定义基于类的视图(Class-basedViews)来处理RESTfulAPI请求。它提供了强大的功能和灵活的扩展点,使得编写API视图变得更加简单和灵活。【2】主要特点和用法处理HTTP请......