热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

drf:请求(Request)与响应(Response),全局设置和局部设置drf的默认配置项。

请求(Request)与响应(Response)请求(Request),当次的HTTP响应请求到Django中被封装成python中的对象request.data-POST,PUT

请求(Request)与响应(Response)


请求(Request),当次的HTTP响应请求到Django中被封装成python中的对象



  • request.data - POST, PUT请求的数据

  • request.query_params -GET请求的数据

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

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

Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。

无论前端发送的哪种格式的数据,我们都可以以统一的方式读取数据。


响应(Response),主要:data(HTTP的响应体),status(状态码),headers(HTTP的响应头)

rest_framework.response.Response


  • 继承关系 ---> SimpleTemplateResponse ---> django的HttpResponse


构造方式

Response(data, status=None, template_name=None, headers=None, content_type=None)

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

data不能是复杂结构的数据,如Django的模型类对象,对于这样的数据我们可以使用Serializer序列化器序列化处理后(转为了Python字典类型)再传递给data参数。

参数说明:



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

  • status: 状态码,默认200;

  • template_name: 模板名称,在浏览器访问看达到的模板,如果使用HTMLRenderer 时需指明;

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

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


可以在rest_framework.settings查找所有的drf默认配置项


全局配置,在项目的settings.py 配置。

# 1. 后期 drf 的所有配置都写在这个字典中
# 2. drf有个默认配置文件(drf源码的--setting.py),如果没有写项目的配置文件,则使用内置的,写了优先使用项目的。
# 3. 返回样式的配置,一般不配置。
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
)
}

局部配置,只针对某个视图函数。

导入模块:

from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer

class BookView(APIView):
# 局部配置。尽管全局配置了,优先使用局部的。
renderer_classes = [JSONRenderer]
def post(self, request):
print(request)
ser = BookSerializers(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
def get(self, request):
book_list = Books.objects.all()
# many=True 代表序列化多条数据
ser = BookSerializers(instance=book_list, many=True)
"""

ser 是ListSerializer的对象
"""
print(type(ser))
respOnse= {'code': 100, 'msg': '查询成功', 'result': ser.data}
#
return Response(response, status=status.HTTP_202_ACCEPTED, headers={'name': 'junjie'})


推荐阅读
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 深入解析Django CBV模型的源码运行机制
    本文详细探讨了Django CBV(Class-Based Views)模型的源码运行流程,通过具体的示例代码和详细的解释,帮助读者更好地理解和应用这一强大的功能。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • Jenkins API当前未直接提供获取任务构建队列长度的功能,因此需要通过解析HTML页面来间接实现这一需求。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 在Python编程中,经常需要处理文件下载的任务。本文将介绍三种常用的下载方法:使用urllib、urllib2以及requests库进行HTTP请求下载,同时也会提及如何通过ftplib从FTP服务器下载文件。 ... [详细]
  • 本文介绍了如何通过 XMLHttpRequest 对象在不同浏览器中实现 AJAX 的 POST 和 GET 请求,并详细说明了 XMLHttpRequest 的五个状态及其含义。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 如何在Django和Vue中配置共享全局变量以实现跨组件数据传递
    在Django和Vue项目中,为了实现跨组件的数据传递,可以通过配置共享全局变量来达到目的。具体做法是在Django项目的主目录下创建一个专门用于存储全局变量的Python文件。例如,可以在该文件中定义一个函数 `templates_global`,该函数返回需要在多个组件间共享的数据。此外,还可以利用Vue的Vuex状态管理库来进一步增强数据的管理和传递效率,确保数据的一致性和可维护性。 ... [详细]
author-avatar
海边遗忘的时光_958
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有