Django-Rest framework中文翻译-Request
REST framework的Request类扩展自标准的HttpRequest,增加了REST framework灵活的请求解析和请求验证支持。
请求解析
REST framework的Request对象提供了灵活的请求解析,让你可以像一般处理普通form数据一样处理带JSON数据或者媒体类型的request。
.data
request.data返回request body解析后的内容。这类似于标准的request.POST和request.FILES属性除了下面几个区别:
- 它包含了所有解析后的内容,包括文件类型和非文件类型的输入
- 它支持除了
POST类型以外的其他HTTP方法的内容解析,意味着你可以访问PUT和PATCH类型reqeust的内容。 - 它提供REST framework灵活的请求解析,而不单单支持from数据。举例说你可以像处理form数据一样处理JSON数据。
详细信息,参考parsers documentation
.query_params
request.query_params 是比request.GET更贴切的一个同义词
为了清楚起见,在你的代码里,我们推荐你使用request.query_params来代替Django's标准request.GET。这样做可以让你的代码更准确和明了-任何HTTP方法类型都可能包含查询信息,不紧紧是GET请求。
.parsers
APIView类或者@api_view 装饰器将保证这个属性会被自动赋予一系列的Parser实例,基于这个view的parser_class集合或者基于DEFAULT_PARSER_CLASSES设置
你一般不会访问这个属性
如果一个客户端发送了有缺陷的内容,那么访问request.data也许会引起ParseError。默认情况下REST framework的APIView类或者@api_view装饰器将会捕获这个错误然后返回400 Bad Request的response
如果一个客户端发送了一个包含有不能解析的content-type那么将会引起一个UnsupportedMediaType异常,这个异常将会被捕获并且返回一个415 Unsupported Media Type response。
内容协商
request暴漏了一些属性是允许你去判断内容协商阶段的结果。这将允许你去实现一些行为比如给不同的媒体类型选择一个不同的序列化方案
.accepted_renderer
内容协商阶段选出来的渲染器实例
.accepted_media_type
是一个字符串用来表明内容协商阶段接受的媒体类型
验证
REST framework提供了灵活的,针对每一个请求的验证,可以给你的这样的能力:
- 不同部分的API使用不同的验证策略
- 支持使用多个验证策略
- 同时提供即将到来的request相关的user和token信息
.user
request.user一般返回django.contrib.auth.models.User的一个实例,尽管它的行为取决于你使用的验证策略。
如果request没有验证,那么request.user的默认值的django.contrib.auth.models.AnonymousUser。
更多信息,查看authentication documentation
.auth
request.auth返回任何额外的授权上下文。reqeust.auth的具体行为取决于使用的认证策略,但一般来说它会是reqeuset请求授权得到token的实例。
更多详细信息请看 authentication documentation
.authenticators
APIView类或者@api_view装饰器将会保证这个属性被自动设置为一列Authentication的实例,基于authentication_classes集合或者基于DEFAULT_AUTHENTICATORS设置。
你一般不需要访问这个属性
浏览器增强
REST framework支持一些浏览器增强比如说是基于浏览器的PUT,PATCH和DELETE表单
.method
request.method返回请求的HTTP方法大写的字符串表达。
基于浏览器PUT,PATCH,DELETE表单被支持
.content_type
request.content_type,返回一个代表HTTP请求body媒体类型的字符串对象,或者一个空串如果没有媒体类型提供的话。你一般不需要直接访问请求的内容类型,因为一般来说你会基于REST框架的默认解析行为
如果你确实需要访问request的媒体类型,你应该使用.content_type属性优先于使用request.META.get('HTTP_CONTENT_TYPE'),因为它提供基于浏览器的非form内容。
.stream
request.stream返回request body的流的展现方式
你一般不会直接访问request的内容,因为你一般会基于REST 框架的默认请求解析实现
标准HttpRequest属性
因为REST framework的Request类扩展自Django's的HttpRequest,所有其他的标准的属性和方法都是可用的。举例来说request.META和request.session字典都和之前一样
注意因为实现的原因,Request类不是直接继承子HttpRequest类,而是使用组合扩展了它
Django-Rest framework中文翻译-Request的更多相关文章
- Django REST FrameWork中文教程2:请求和响应
从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...
- Django REST framework 中文教程1:序列化
建立环境 在我们做任何事情之前,我们将使用virtualenv创建一个新的虚拟环境.这将确保我们的包配置与我们正在开展的任何其他项目保持良好的隔离. virtualenv envsource env/ ...
- Django REST framework 第二章 Request and Response
此章节开始真正的撰写REST framework的核心代码,介绍一系列必要的建立设计 Request Objects REST framework介绍了一个Request对象用来扩展常规的HttpRe ...
- DRF (Django REST framework) 中的Request 与 Response
DRF中的Request 与 Response 1. Request - REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST f ...
- Django REST FrameWork中文教程3:基于类的视图
我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...
- Django-Rest framework中文翻译-generic-views
通用视图 Django的通用视图......被开发为常见用法模式的快捷方式......它们采用视图开发中的某些常见习语和模式并对其进行抽象,以便您可以快速编写数据的常用视图,而无需重复自己. - Dj ...
- Django Rest framework 框架之认证使用和源码执行流程
用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...
- 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...
- 《Django By Example》第九章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag 注:哈哈哈,第九章终于来啦 ...
随机推荐
- ModuleNotFoundError: No module named 'PIL'
错误:ModuleNotFoundError: No module named 'PIL' 解决办法: pip install Pillow
- linux下的C语言开发(定时器)
定时器是我们需要经常处理的一种资源.那Linux下面的定时器又是怎么一回事呢?其实,在linux里面有一种进程中信息传递的方法,那就是信号.这里的定时器就相当于系统每隔一段时间给进程发一个定时信号,我 ...
- 洛谷P4158 [SCOI2009]粉刷匠
传送门 设$dp[i][j][k][0/1]$表示在涂点$(i,j)$,涂了$k$次,当前点的颜色是否对,最多能刷对多少个格子 首先换行的时候肯定得多刷一次 然后是如果和前一个格子颜色相同,那么当前点 ...
- taro.js & dva 脚手架搭建及常见问题
## taro.js & dva 脚手架 ### 启动 npm install -g @tarojs/cli // 全局安装taro-cli npm i npm run dev:weapp / ...
- 240 Search a 2D Matrix II 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵中的一个目标值.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列.例如,考虑下面的矩阵:[ [1, 4, 7 ...
- [转]oracle 同义词 synonym
本文转自:http://blog.csdn.net/generalfu/article/details/7906561 同义词定义 当一个用户想访问另外一个用户的表时, 需要在表前加用户名,总加表名不 ...
- Visual Studio Code -VS Code
VS Code 免费开源的编辑器,支持 windows. mac. Linux. 微软出品 官网:https://code.visualstudio.com/ 下载地址:https://code.vi ...
- python自动化--接口请求及封装
基于http协议,最常用的是GET和POST两种方法. 接口文档需要包含哪些信息: 接口名称接口功能接口地址支持格式 json/xml请求方式请求示例请求参数(是否必填.数据类型.传递参数格式)返回参 ...
- oracle数据库跨库查询
create public database link mylink connect to orclname identified by orclpasswd using 'ORCL'; drop p ...
- 【sqli-labs】 less65 GET -Challenge -Blind -130 queries allowed -Variation4 (GET型 挑战 盲注 只允许130次查询 变化4)
双引号括号闭合 http://192.168.136.128/sqli-labs-master/Less-65/?id=1")%23