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

DRF之View和APIView

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

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

【1】导入

```shell
# DRF需要使用pip install 安装
pip install djangorestframework
```

  • DRF(Django Rest Framework)是一个用于构建 Web API 的工具包,它是基于 Django 框架的一个第三方应用(app)

  • 在 Django 项目中,一个应用(app)通常是一个具有特定功能的模块,它包含了模型、视图、模板等组件,用于实现特定的功能或业务逻辑。

image-20240415161036714

【2】使用

  • 使用drf时,需要先在settings.py文件中进行注册app

```python
# 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__获取属性,好像没有什么必要,肯定是会报错的,为什么要多做一个异常捕获,然后再抛出一个异常呀

 

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

相关文章

  • 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请......
  • uni app uview新增商品页(无限级分类选择和多图上传)
    uniappuview新增商品页(无限级分类选择和多图上传)给自己的牛腩商品库UNIAPP加的一个新增功能,就是通用的新增页面,用的uview2(https://uviewui.com/components/intro.html),能选择无限级分类和多图上传,自已觉得这个新增页面在以后做uniapp项目的时候很多地方会用到吧,先记下来了,以......
  • Algorius Net Viewer 2024.2.1 (Windows) - 网络可视化、管理、监控和清点
    AlgoriusNetViewer2024.2.1(Windows)-网络可视化、管理、监控和清点Comprehensivesoftwareproductforvisualizing,administering,monitoring,andinventoryingcomputersnetworkofanylevel请访问原文链接:AlgoriusNetViewer2024.2.1(Windows)-网络可视化......
  • c# 中 dataGridView控件 显示水平滚动条
    1.最主要的在dataGridView控件属性中的ScrollBars是否设为BothBoth代表水平和垂直方向根据实际需求自动显示滚动条None代表水平和垂直都不显示滚动条Vertical代表只垂直显示滚动条Horizontal代表只水平显示滚动条2.检查表格中每个列的属性,看Frozen应设置为false 如果......
  • Qt:获取QTableView中的数据,进行搜索
    1.创建QTableView内容QStandardItemModel*model=newQStandardItemModel(ui->tableView);//四列model->setHorizontalHeaderItem(0,newQStandardItem("1"));model->setHorizontalHeaderItem(1,newQStandardItem("Name"));model->set......