Django Rest framework解析器和渲染器详解
解析器
解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程.
本质就是对请求体中的数据进行解析.
Content-type:用于声明我给你传的是什么类型的数据
- application/x-ww-form-urlencoded 表单数据类型
- multipart/form-data 文件
- application/json(比如:request.body)
- Accept:用于声明我能解析什么样的数据类型
Django中的解析器
我们的请求进来后,请求体中的数据是保存在request.body中的.
这就说明:==解析器会把解析好的数据放入request.body中.==
我们在视图中打印request的类型,便可知道request是WSGIRequest这个类的.
我们可以看下这个类的源码,我们是这样拿到request.POST数据的:
application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件.
multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传.
一个解析到request.POST中,一个解析到request.FILES中.
也就是说,在Django中我们之所以能在request中得到各种数据类型,是因为我们使用了这些解析器.
DRF中的解析器
DRF的请求数据都在request.data中.
所以,我们就来看Request类中的data:
得到解析器后,调用解析器里的parse方法:
到这里,我们再看下DRF配置的默认的解析器的类都有哪些:
DEF支持Json、Form表单的请求,包括多种文件类型的数据:
我们也可以再视图中配置视图级别的解析器:
好
DRF中的渲染器
渲染器为我们友好地展示数据.
DRF为我们提供的渲染器有:
一个是Json的,一个是浏览器的.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
django-rest-framework 自定义swagger过程详解
前言 之前的文章编写了一个返回json的例子,直接用浏览器进行get请求虽然成功了, 但是接口文档的样式很难看, 不好用. 而且提示没有访问权限. 我们一般都希望能够直接在接口文档中进行请求, 以测试接口, 本篇文章中会给出一个自定义swagger(openapi)的例子. 使接口文档变得美观可用, 可以填写参数, 可以进行请求以观察数据格式, 测试接口是否可用. 环境 workon python35 pip list chardet (3.0.4) coreapi (2.3.3) coresc
-
Django REST framework 分页的实现代码
官方文档[这里] 用于分页的模块: Pagination Django REST framework 有内置 Pagination 模块,无需额外安装, 只需做简单的配置. 配置什么呢? 就是告诉Django要用到什么样的分页样式, 比如: 返回哪些字段, 每页的大小, 请求参数的名称等等. 2种配置途径: 1.settings.py 文件里做全局的配置 2.单独为每个需要分页的 view 分配自定义分页器. 途径1是为所有继承ListViewAPI的接口做默认配置, 途径2对单独一个接口做个性
-
Django REST framework 视图和路由详解
DRF中的Request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 比如,区别于Django中的request从request.GET中获取URL参数,从request.POST中取某些情况下的POST数据. 在APIView中封装的request,就实现了请求数据的解析: 对于GET请求的参数我们通过request.query_params来获取. 对于POST请求.PUT请求的
-
Django REST framework视图的用法
前言 在了解了REST farmwork封装的视图类之后,我对python的面向对象有了更深刻的理解. Django RESR framework框架内置的视图类充分发挥了面向对象封装与继承的特性. 自己写一个类似于DRF内置视图类的功能 实现一个图书出版社的增.删.改.查.查功能,两个查一个是查所有出版社,一个是查具体的某一个出版社. 首先是一个简略的表结构设计models.py: from django.db import models class Publisher(models.Mode
-
Django REST framework 如何实现内置访问频率控制
对匿名用户采用 IP 控制访问频率,对登录用户采用 用户名 控制访问频率. from rest_framework.throttling import SimpleRateThrottle class VisitThrottle(SimpleRateThrottle): """匿名用户访问频率限制""" scope = "AnonymousUser" # 随便写的,可以作为key保存在缓存中 def get_cache_key
-
django-rest-framework解析请求参数过程详解
前言 我们在django-rest-framework 自定义swagger 文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进行请求, 接下来的问题是如何接受参数, 由于请求方式与参数序列化形式的不同, 接收参数的方式也有不同. 前提条件 服务端我们使用django-rest-framework编写接口. class ReturnJson(APIView): coreapi_fields=( DocParam("token"), ) def get(self, requ
-
Django Rest Framework实现身份认证源码详解
目录 一.Django框架 二.身份认证的两种实现方式: 三.身份认证源码解析流程 一.Django框架 Django确实是一个很强大,用起来很爽的一个框架,在Rest Framework中已经将身份认证全都封装好了,用的时候直接导入authentication.py这个模块就好了.这个模块中5个认证类.但是我们在开发中很少用自带的认证类,而是根据项目实际需要去自己实现认证类.下面是内置的认证类 BaseAuthentication(object):所有的认证相关的类都继承自这个类,我们写的认证
-
Django restful framework生成API文档过程详解
自动生成api文档(不管是函数视图还是类视图都能显示) 1.安装rest_framework_swagger库 pip install django-rest-swagger 2.在项目下的 urls.py 中加入如下: from rest_framework_swagger.views import get_swagger_view schema_view = get_swagger_view(title='API文档') urlpatterns += [ path(r'docs/', sch
-
Go语言JSON解析器gjson使用方法详解
目录 gjson 安装 使用 gjson GJSON 是一个Go包,它提供了一种从json文档中获取值的快速简单的方法.它具有单行检索.点符号路径.迭代和解析 json 行等功能. 还可以查看SJSON以修改 json,以及JJ命令行工具. 本自述文件是如何使用 GJSON 的快速概述,有关更多信息,请查看GJSON 语法. github 的地址在这里. 安装 安装gjson,使用的是go传统的安装方法: go install github.com/tidwall/gjson@latest 在文
-
Vue 2.0 侦听器 watch属性代码详解
用法 -------------------------------------------------------------------------------- 先来看看官网的介绍: 官网介绍的很好理解了,也就是监听一个数据的变化,当该数据变化时执行我们的watch方法,watch选项是一个对象,键为需要观察的表达式(函数),还可以是一个对象,可以包含如下几个属性: handler ;对应的函数 ;可以带两个参数,分别是新的值
-
springboot config 拦截器使用方法实例详解
本文介绍Spring-Boot中使用拦截器,一般在拦截器中处理跨域处理,允许跨域访问项目,拦截器使用详细资料请查阅官网. 实现自定义拦截器步骤: 1.创建一个类并实现HandlerInterceptor接口. 2.创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法. 2.将自定义的拦截器交由spring管理,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加). 创建拦截器类 package com.exam
-
Python PyQt5实战项目之文件拷贝器的具体实现详解
目录 简介 UI设置 主要逻辑 信号与槽 成果展示 简介 写了一个简单的文件夹内容下所有文件复制到另一个文件夹内,主要逻辑代码是来自<2小时玩转python多线程编程>中的一个章节. UI设置 def ui_init(self): ''' 界面的函数 ''' self.setWindowTitle('拷贝器') self.resize(600,400) self.setMinimumSize(600,400) # 设置窗口的最小值 '''控件''' self.root_btn = QPushB
-
python装饰器的特性原理详解
这篇文章主要介绍了python装饰器的特性原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天发现了装饰器的另一种用法,下面就先上代码: data_list = [] def data_item(func): data_list.append(func) return func @data_item def foo(): return 1 @data_item def foo1(): return 2 @data_item def fo
-
Python Pytest装饰器@pytest.mark.parametrize详解
Pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化,类似DDT 如:@pytest.mark.parametrize('请求方式,接口地址,传参,预期结果',[('get','www.baidu.com','{"page":1}','{"code":0,"msg":"成功"})',('post','www.baidu.com','{"page"
-
Java SpringMVC拦截器与异常处理机制详解分析
目录 拦截器(interceptor)的作用 拦截器快速入门 案例:用户登录权限控制 拦截器方法说明 SpringMVC异常处理 异常处理的思路 异常处理两种方式 拦截器(interceptor)的作用 Spring MVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain).在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用.拦截器也是AOP思
-
Python PyQt5实战项目之查询器的实现流程详解
目录 简介 主界面 添加数据的界面 删除数据的界面 修改数据的界面 全部代码 展示 简介 这是一个操作数据库(sqlite3)的项目,用PyQt5进行界面封装. 此次项目最主要的是,主界面与子界面的交互,一个主界面与三个子界面交互 可以添加数据,修改数据,删除数据 主界面 class MainWidget(QMainWindow): def __init__(self): super(MainWidget,self).__init__() self.ui_init() self.connect_
随机推荐
- 浅析SQL Server的分页方式 ISNULL与COALESCE性能比较
- 详谈Angular 2+ 的表单(一)之模板驱动型表单
- 浅谈PHP检查数组中是否存在某个值 in_array 函数
- js中的数组Array定义与sort方法使用示例
- 原生js实现放大镜
- JavaScript之IE的fireEvent方法详细解析
- linux 环境 mysql写入中文报错
- Ajax Control Toolkit 34个服务器端控件第1/2页
- css类选择器的使用方法详解
- 使用VB将ASP代码封装到DLL文件
- Python中操作文件之write()方法的使用教程
- 解析关于SQL语句Count的一点细节
- jquery动感漂浮导航菜单代码分享
- C语言数据结构树之后序遍历的实现
- 使用RxJava中遇到的一些”坑“
- 利用python将图片转换成excel文档格式
- 使用WebUploader实现上传文件功能(一)
- php爬取天猫和淘宝商品数据
- SpringBoot开发案例 分布式集群共享Session详解
- 设置Mysql5.6允许外网访问的详细流程分享