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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由

drf请求响应简介


请求Request


在DjangoViews中,每定义一个视图,都会传入一个默认的HttpRequest对象,这个HttpRequest对象由Django为我们创建。


REST Framework传入视图的request对象就不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。


REST framework 提供了Parser解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSON、表单等)将请求数据进行parse解析,解析为类字典对象保存到Request对象中。


Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。无论前端发送的哪种格式的数据,我们都可以以统一的方式进行读取。




常用属性


   Data


   Request.data返回解析之后的请求体数据。类似于Django中标准的request.POST和request.FILES属性,但提供的如下特性:


       包含了解析之后的文件和非文件数据


       包含了POST、PUT、PATCH请求方式解析后的数据


       利用了REST framework的parsers解析器,不仅支持表单类型数据,也支持JSON数据


   query_params(查询字符串)

   request.query_params与标准的request.GET相同,只是更换了更准确的名称而已。




响应Response


此处的响应就不再是django中的HttpResponse对象了,而是由REST

framework提供的一个响应类Response,使用该类构造响应对象时,响应的具体数据内容会被转换(渲染)成符合前端需求的类型(JSON,XML)。


RESTframework提供了Renderer渲染器,用来根据请求头中的Accept(接收数据类型声明)来自动转换相应数据到对应格式。如果前端请求中未进行Accept声明,则会采用默认方式处理相应数据,我们可以通过配置来修改默认响应格式。



构造方式

from rest_framework.response import Response
Response(data, status=None, template_name=None, headers=None, content_type=None)

注意:


   data数据不要是render处理之后的数据,只需传递python的内建类型数据即可,REST framework会使用renderer渲染器来处理data


   Data不能是复杂结构的数据,例如Django的模型类对象,对于模型类对象的话,可以使用序列化器来进行序列化处理之后再传递给data参数。




参数说明


Data:为响应准备的序列化处理后的数据;


Status:状态码,默认为200;


Template_name:模板名称,如果使用HTMLRenderer时需要指明;


Headers:用于存放响应头信息的字典;


Content_type:响应数据的Content_type,通常此参数无需传递,REST framework会根据前端所需类型数据类设置该参数。



Response常用属性


  1. Data传给response对象的序列化器后,但还没有经过render处理的数据


  1. status_code
    状态码


  1. Content
    经过render处理后的响应数据



基类


REST Framework为我们提供了视图的基类,继承于django的View父类。其位于rest_framework.views中


APIView的使用


   APIView类


   位置:rest_framework.views.APIView

   APIView是REST Framework提供的所有视图的基类,继承于Django的View父类。


   APIView与View的不同之处:

   传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象;


   视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;


   任何APIException异常都会被捕获到,并且处理成合适的响应信息;


   在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。


使用案例


案例一:查看drf的结构

先创建一个子应用

4cff5a422f444ad29ca2323e0113002b.png


  • 在自应用的views.py文件中导入APIView并写上函数

导入模块:


from rest_framework.views import APIView


from rest_framework.response import Response

class HusbandAPIView(APIView):
    def get(self, request):
        data = request.data
        print(data)
        print(type(data))
        return Response({'message':'请求处理成功'})



配置路由

bac4e0e6840541c881367a9403e86714.png


276e12c3bd504b44b510ddd8ba2d8d80.png

运行项目,在网页中可看到drf的结构

5090354839274ea9b2333b63836f1c00.png

1b4d1501632d4498a2e1634da7ed54f6.png

fade1efc4fc84840989f36eb8974456b.png


案例二:使用post请求获取表单和非表单数据


  1. 写上post方法


045695541e7a4d1c8fbba5a705383d9b.png


使用Postman发送表单请求

e20ed875048a4b7086385198447c7de7.png

bbbcb2bb3ae64b43a029fd78488756b2.png

e6fd72f22ace4c7ba5b7f912bb7cd812.png

dd3e91c0261748c2898889830900ef51.png



接收非表单的数据

778e2705f5d84c8faf4209fb0346666c.png

698cebd082f944a49a57f197bd23df3a.png


案例三:使用get方法获取查询字符串

82ab792ce05f4de389c276c3d9aea673.png1f2a921931cc4b7e99c8729457804f21.png

e0b8a16f004e4dca8fb5ad574539a123.png


相关文章
|
2月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
47 2
|
21天前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
2月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
16 0
|
2月前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
107 4
|
2月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
101 1
|
16天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
66 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
15天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
44 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
11天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
24 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台