REST framework的Request类扩展自标准的HttpRequest,增加了REST framework灵活的请求解析和请求验证支持。


请求解析

REST framework的Request对象提供了灵活的请求解析,让你可以像一般处理普通form数据一样处理带JSON数据或者媒体类型的request。

.data

request.data返回request body解析后的内容。这类似于标准的request.POSTrequest.FILES属性除了下面几个区别:

  • 它包含了所有解析后的内容,包括文件类型和非文件类型的输入
  • 它支持除了POST类型以外的其他HTTP方法的内容解析,意味着你可以访问PUTPATCH类型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.METArequest.session字典都和之前一样
注意因为实现的原因,Request类不是直接继承子HttpRequest类,而是使用组合扩展了它

Django-Rest framework中文翻译-Request的更多相关文章

  1. Django REST FrameWork中文教程2:请求和响应

    从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...

  2. Django REST framework 中文教程1:序列化

    建立环境 在我们做任何事情之前,我们将使用virtualenv创建一个新的虚拟环境.这将确保我们的包配置与我们正在开展的任何其他项目保持良好的隔离. virtualenv envsource env/ ...

  3. Django REST framework 第二章 Request and Response

    此章节开始真正的撰写REST framework的核心代码,介绍一系列必要的建立设计 Request Objects REST framework介绍了一个Request对象用来扩展常规的HttpRe ...

  4. DRF (Django REST framework) 中的Request 与 Response

    DRF中的Request 与 Response 1. Request - REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST f ...

  5. Django REST FrameWork中文教程3:基于类的视图

    我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...

  6. Django-Rest framework中文翻译-generic-views

    通用视图 Django的通用视图......被开发为常见用法模式的快捷方式......它们采用视图开发中的某些常见习语和模式并对其进行抽象,以便您可以快速编写数据的常用视图,而无需重复自己. - Dj ...

  7. Django Rest framework 框架之认证使用和源码执行流程

    用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...

  8. 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...

  9. 《Django By Example》第九章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag 注:哈哈哈,第九章终于来啦 ...

随机推荐

  1. RDA CoreDump 实例

    UMF进程的Coredump问题追踪: 通河code开机DUMP问题 现象: 开机Dump,原因:_MAINAPP_SW_Init()调用了Factory_Ver_Debug()内存溢出. 分析流程: ...

  2. 搜索goog

    http://www.tech365.net/share/24.html 64.233.160.132|64.233.168.17|64.233.168.167|64.233.160.98|64.23 ...

  3. C# 动态调用 WebService (转)

    在 Visual Studio 中客户端程序可以添加服务引用来调用 WebService,这样 Visual Studio 会生成与之相关的代理类,通过这个代理类可以很方便的访问所需要的服务. 如果服 ...

  4. T-SQL编程以及常用函数

    1.索引添加索引,设计界面,在任何一列前右键--索引/键--点击进入添加某一列为索引 2.视图 视图就是我们查询出来的虚拟表创建视图:create view 视图名 as SQL查询语句,分组,排序, ...

  5. ASP.NET控件之RadioButtonList

    “RadioButtonList”控件表示一个封装了一组单选按钮控件的列表控件. 可以使用两种类型的 ASP.NET 控件将单选按钮添加到网页上:各个“RadioButton”控件或一个“RadioB ...

  6. HTML增加附件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. .Net实战之反射相关类之间的人体经络关系

    --1.类的部分组成成员 --2.巧记成员之间的关系 [MyTable("T_UserInfo")] public class UserInfo : Person, UserSer ...

  8. [ NOI 2002 ] 银河英雄传说

    \(\\\) Description 有 \(n\) 列战场,每一列一开始只有一个战舰,编号就是对应的战场编号. 有 \(m\) 次操作: \(M_{i,j}\) :把 \(i\) 所在的一整列接在 ...

  9. poj1778 All Discs Considered

    思路: 拓扑排序.贪心. 实现: #include <bits/stdc++.h> using namespace std; vector<]; int n1, n2; inline ...

  10. JDBC使用游标实现分页查询的方法

    本文实例讲述了JDBC使用游标实现分页查询的方法.分享给大家供大家参考,具体如下: /** * 一次只从数据库中查询最大maxCount条记录 * @param sql 传入的sql语句 * @par ...