Django REST Framework——4. 请求与响应

DRF传入视图的request对象不再是Django默认的HttpRequest对象,而是DRF提供的扩展后的request对象。 Request对象的核心功能是request.data属性,它与request.POST类似,但对于使用Web API更为有用。

request.POST
request.data

常用属性

  • datarequest.data 返回解析之后的请求体数据。类似于Django中的 request.POSTrequest.FILES属性,但提供如下特性:
  • 包含了解析之后的文件和非文件数据;
  • 包含了对POST、PUT、PATCH请求方式解析后的数据;
  • 利用了DRF的parsers解析器,不仅支持表单类型数据,也支持JSON数据。
  • query_paramsrequest.query_params与Django标准的 request.GET相同,只是更换了更正确的名称而已。因为任何HTTP方法类型都可能包括查询参数,而不仅仅是GET请求。
return Response(data)

2.1 常用属性

  • data: Response未渲染的序列化数据。
  • status_code: HTTP响应的数字状态码。
  • content: 渲染好的响应内容,但必须先调用 render()方法,才能访问 content

2.2 自定义Response对象

from rest_framework.response import Response

class CustomResponse(Response):

    def __init__(self, code=1000, msg="成功", data=None, status=None, template_name=None, headers=None, content_type=None, **kwargs):
        custom_data = {'code':code, 'msg': msg}
        if data:
            custom_data = {'code':code, 'msg': msg, 'data':data}
        custom_data.update(kwargs)
        super().__init__(data=custom_data, status=status, template_name=template_name, headers=headers, content_type=content_type)

"""
使用时,就要返回CustomResponse类的对象了
return CustomResponse(data={'name':'hugh'},......)
"""

在视图中使用纯数字的状态码,会导致可读性很差,并且容易忽视掉错误或警告。 DRF对每一个状态码提供了更加清楚、直观的标识符,其本质是一些常量,将纯数字的状态码保存了起来而已。比如 HTTP_400_BAD_REQUEST,保存的就是数字400。

3.1 使用方法

虽然实现简单,但使用这些标识符(常量)的确可以使代码更加清晰、易读。比如:

from rest_framework import status
from rest_framework.response import Response

def empty_view(self):
    content = {'请求的资源不存在'}
    return Response(content, status=status.HTTP_404_NOT_FOUND)

这些标识符(常量)仅仅是加了HTTP前缀和一些状态关键字后缀。只要我们知道要使用哪个状态码,就可以通过IDE的自动补全打出完整名称,无需去逐个了解😄。

3.2 辅助函数

rest_framework.status模块还包括一组辅助函数,用于测试状态代码是否在给定范围内。

完整的函数列表如下:

is_informational(status.HTTP_404_NOT_FOUND)
is_success()
is_redirect()
is_client_error()
is_server_error()

4.1 全局配置

在项目配置文件settings.py中:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ]
}

4.2 局部配置

在需要配置的视图中:

from rest_framework.renderers import JSONRenderer
from rest_framework.views import APIView

class AView(APIView):

    renderer_classes = [JSONRenderer]

    def get(self, request):
        ......

4.3 渲染器类

  • JSONRenderer: 使用utf-8编码将数据呈现为 JSON,该渲染器是默认启用的。 media_typeapplication/json
  • TemplateHTMLRenderer: 使用Django的标准模板渲染将数据渲染到HTML中,传递给Response的数据不需要序列化,但可能需要 template_name参数。 media_typetext/html
  • BrowsableAPIRenderer: 将数据渲染成可浏览的API,也就是通过浏览器打开时默认的样子,所以,该渲染器是默认启用的。 media_type: text/html

    渲染器类种类繁多,但不常用。感兴趣可以参考官方文档:传送门

Original: https://blog.csdn.net/qq_39330486/article/details/121999274
Author: 花_城
Title: Django REST Framework——4. 请求与响应

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737136/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 快速入门scrapy爬虫框架

    scrapy爬虫框架 scrapy爬虫框架 简介 scrapy爬虫框架入门简介 网页爬虫代码 简介 通过实战快速入门scrapy爬虫框架 scrapy爬虫框架入门简介 下载scra…

    Python 2023年5月24日
    079
  • python中模块没有属性_模块没有要显示的属性

    这是我在Pygame窗口中绘制网格的代码,当我在学校的一台PC上运行它时,它工作得很好。现在我试图在家里继续,出现了一个我自己找不到解决办法的错误:import sys, pyga…

    Python 2023年9月21日
    040
  • 史上最全的iptables应用

    第 14 章 防火墙的使用 14.1 防火墙的概念 将不安全的网络流量信息进行隔离 14.2 防火墙的实现 14.2.1 硬件实现 思科,华为防火墙服务器 14.2.2 软件实现 …

    Python 2023年6月10日
    082
  • Docker部署Django+Mysql+uWSGI+Nginx Web应用 – 笔记更新2022-01-04

    Docker 部署Django+Mysql+uWSGI+Nginx Web应用 Change logs更新记录 2022/1/4 fixed web access problem …

    Python 2023年8月4日
    068
  • linux下conda使用教程

    1.验证conda是否已经安装并在系统上运行 conda –version 2.将conda更新到当前版本 conda update condaProceed ([y]…

    Python 2023年9月8日
    098
  • Pygame入门 2022 (2)

    Python 2023年5月24日
    056
  • Numpy、Jupyter、Matplotlib 基础

    前言 开始机器学习之旅 之前我们需要具备的基础~~~Numpy、Jupyter、Matplotlib 基础 然后看一个机器学习的一个入门和经典的知识点,鸢尾花分类,我们通过这个小例…

    Python 2023年8月25日
    048
  • Python量化-如何获取实时股票信息

    如何获取实时股票信息 股票信息的接口有很多,之前大家常用的是新浪的,但在年初的时候,新浪的接口突然不能使用,给大家造成了很大的困扰,为此网上也有很多教程教大家如何从新浪获取数据,跟…

    Python 2023年6月12日
    0126
  • pandas+datafram

    Pandas的dataframe基本操作方法总结 一.DataFram的基本结构: import pandas as pd import numpy as np df = pd.D…

    Python 2023年8月20日
    036
  • 详解视频中动作识别模型与代码实践

    摘要:本案例将为大家介绍视频动作识别领域的经典模型并进行代码实践。 本文分享自华为云社区《视频动作识别》,作者:HWCloudAI。实验目标 通过本案例的学习: 掌握 C3D 模型…

    Python 2023年10月29日
    040
  • 数据结构专题(附完整代码)

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    Python 2023年9月29日
    045
  • python && ffmpeg | 批量合并在手机上下载的B站视频

    背景 在手机的B站下载了很多视频,但这些视频并不是以mp4存储的于是想把这些视频整理一下但视频很多,自然不能一个一个用格式工厂合并,于是就想到了python 工具 Python:P…

    Python 2023年6月11日
    081
  • Pandas数据整理

    1.Pandas中有两个主要的数据结构:Series和DataFrame。 Serise:一维的数据结构。Series是一个类似一维数组的对象,它能够保存任何类型的数据,主要由一组…

    Python 2023年8月6日
    079
  • Django网盘制作

    记录自己编写的网盘,支持登录、注册、文件上传、文件下载,不同的用户只能操作自己的文件,在环境准备阶段附赠自己的源代码,请大佬勿喷,还有很多hug未修改,麻烦大家一键三连哦。 网盘功…

    Python 2023年8月6日
    063
  • pythonweb数据可视化_基于Python实现交互式数据可视化的工具(用于Web)

    作者:Alark Joshi 翻译:陈雨琳 校对:吴金笛 本文2200字,建议阅读8分钟。 本文将介绍实现数据可视化的软件包。 这学期(2018学年春季学期)我教授了一门关于数据可…

    Python 2023年9月6日
    043
  • Python—Pycharm社区版下载、安装、配置、使用

    Python—Pycharm,下载、安装、配置及使用教程 使用Python需下载python解释器和编辑器,下面介绍解释器的安装过程。 PyCharm分为专业版,教育版和社区版,专…

    Python 2023年8月2日
    0130
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球