【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由2

简介: 【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由

GenericAPIView



   GenericAPIView

   位置:rest_framework.generics


   继承自APIView,增加了对于列表视图和详情视图可能用到的通用支持方法。通常使用时,可搭配一个或多个Mixin扩展类。


   支持定义的属性:


   列表视图与详情视图通用


   queryset:列表视图的查询集


   serializer_class:视图使用的序列化器


   列表视图使用:


   pagination_class:分页控制


   filter_backends:过滤控制后端



   详情页视图使用


   lookup_field:查询单一数据库对象时使用的条件字段,默认为’pk’

   lookup_url_kwarg:查询单一数据时URL中的参数关键字名称,默认与look_field相同


   导入模块:

   from rest_framework.generics import GenericAPIView


使用演示

演示一

0c6c6aa3853c42308a3092d59868965f.png

4c309b6f7819483d8995eaacb4c48910.png

3869ebf86c4543b2ba6789f0cdfc2682.png

重写get_quertyset()函数

3effde00d2984ab7aa4de6a9d7ee1d58.png

bf0e6fe8a7da44339c966866ab5a3b64.png

演示二:使用序列化器

fd8de5bb32ce4b7fb773188800d395b7.png



使用Postman发送请求后


74ba6c02d0ca4ac085c518a82e3941e4.png


GenericAPIView


与APIView相比,多了数据的全局指定,不用在每一个方法中都进行数据的查询,更加节省内存


优点:


1、不用再每一个方法中进行数据库的交互。


2、一次性将所有的数据都直接缓存下来,然后在方法中获取的时候就是直接在缓存中去去除数据,避免了每一次都会与数据库进行交互造成资源的大量浪费。





mixin扩展类与三级视图


扩展类


位置:rest_framework.mixins

   ListModelMixin:列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码,该Mixin扩展类的list方法会对数据进行过滤和分页。


   CreateModelMixin:提供create(request, *args, **kwargs)方法快速实现创建资源的视图,成功返回201状态码,如果序列化器对前端发送的数据验证失败,返回400错误。

   RetrieveModelMixin:详情视图扩展类,提供retrieve(request, *args, **kwargs)方法,可以快速实现返回一个存在的数据对象


   UpdateModelMixin:更新视图扩展类,提供update(request, *args, **kwargs)方法,可以实现局部更新。成功返回200,序列化器校验数据失败时,返回400错误。


   DestroyModelMixin:删除视图扩展类,提供destroy(request, *args, **kwargs)方法,可以快速实现删除一个存在的数据对象。成功则返回204,不存在则返回404

注意:以上五个扩展类使用方法一样,需要导入扩展类,定义的视图继承扩展类与GenericAPIView类,然后直接return调用扩展类为我们提供的方法即可


ListModelMixin


导入模块:


from rest_framework.mixins import ListModelMixin


mixin扩展类最好和GenericAPIView结合使用,否则可能会报错


6dbc5049229f4085880f7cc6f3290385.png


96871740b55a4599aa93dc33f19d30f4.png


三级视图


为什么称之为三级试图,感觉优点违规,别人写很多代码才能实现的查询、添加、删除等逻辑,三级视图直接继承即可使用


导入模块:

from rest_framework.generics import ListAPIView


664da274bfbb4be4acc932294e7e34ca.png

51e5d26c7f984d9d8176d1b4a9412150.png




视图集与路由


视图集


使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中:


   GET: list() 提供一组数据


   GET: retrieve() 提供单个数据


   POST :create() 创建数据


   PUT :update() 更新数据


   PATCH: partail_update, 更新部分数据


   DELETE:destory() 删除数据


   ViewSet视图集类不再实现get()、post()等方法,而是实现动作action如 list() 、create() 等。


导入模块:

from rest_framework.viewsets import ModelViewSet


0df379a2165c400a9f7a07bfb84c14da.png

0c0090c5e5e34b1c81d46777db43ae83.png

bbc66bd26e2f44b082d83c05fb0d6bb6.png


自定义方法

f1ed635f2b22401cbda4f8609f7cba80.png


93168d3358b84c3b81087ea6e033519d.png

f006d0ffdd494edb890f8eae1c22e198.png


路由


对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。


REST framework提供了两个router


   SimpleRouter

   DefaultRouter


路由参数

路由器只能结合视图集一起使用,默认只为标准了增删改查行为生成路由信息,如果想让自定义的行为也生成路由需要在自定义行为上用action装饰进行装饰。


register(prefix, viewset, base_name)


   prefix:该视图集的路由前缀


   viewset:视图集


   basename:路由名称的前缀


如上述代码形成的路由如下:


heroapi/ name:hero-list
heroapi/ name:hero-detail

使用方法

   导入模块:

   from rest_framework.routers import DefaultRouter

   创建router对象,并注册视图集



de3cc9b69bfc421f9e3cbe636e984ada.png

2b594ccaa1cc4893b06de5ae7489682c.png

acb58a4eb28a4ec685d16d4ae08a336d.png


e9d2f4f6c7fd4082994960a3b329e7f8.png

相关文章
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
452 0
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
275 2
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
9月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
466 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
825 45
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
819 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
511 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
733 7
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
535 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台