Django REST framework API 指南(1):请求
Django REST framework API 指南(2):响应
Django REST framework API 指南(3):视图
Django REST framework API 指南(4):通用视图
Django REST framework API 指南(5):视图集
Django REST framework API 指南(6):路由
Django REST framework API 指南(7):解析
Django REST framework API 指南全 27 篇地址html
官方原文连接前端
若是你正在开发基于 REST 的 web API 服务...... 应该忽略 request.POST。 — Malcom Tredinnick,Django 开发组git
REST framework 的 Request
类扩展与标准的 HttpRequest
,并作了相应的加强,好比更加灵活的请求解析(request parsing)和认证(request authentication)。github
REST framwork 的 Request
对象提供了灵活的请求解析,容许你使用 JSON data 或 其余 media types 像一般处理表单数据同样处理请求。web
request.data
返回请求主题的解析内容。这跟标准的 request.POST
和 request.FILES
相似,而且还具备如下特色:django
POST
之外的 HTTP method , 好比 PUT
, PATCH
。.data
都可以正确解析)。.data 具体操做,之后再说~api
request.query_params
等同于 request.GET
,不过其名字更加容易理解。浏览器
为了代码更加清晰可读,推荐使用 request.query_params
,而不是 Django 中的 request.GET
,这样那够让你的代码更加明显的体现出 ----- 任何 HTTP method 类型均可能包含查询参数(query parameters),而不只仅只是 'GET' 请求。bash
APIView
类或者 @api_view
装饰器将根据视图上设置的 parser_classes
或 settings
文件中的 DEFAULT_PARSER_CLASSES
设置来确保此属性(.parsers
)自动设置为 Parser
实例列表。session
一般不须要关注该属性......
若是你非要看看它里面是什么,能够打印出来看看,大概长这样:
[<rest_framework.parsers.JSONParser object at 0x7fa850202d68>, <rest_framework.parsers.FormParser object at 0x7fa850202be0>, <rest_framework.parsers.MultiPartParser object at 0x7fa850202860>]
复制代码
恩,包含三个解析器 JSONParser
,FormParser
,MultiPartParser
。
注意: 若是客户端发送格式错误的内容,则访问
request.data
可能会引起ParseError
。默认状况下, REST framework 的APIView
类或者@api_view
装饰器将捕获错误并返回400 Bad Request
响应。 若是客户端发送的请求内容没法解析(不一样于格式错误),则会引起UnsupportedMediaType
异常,默认状况下会被捕获并返回415 Unsupported Media Type
响应。
该请求公开了一些属性,容许你肯定内容协商阶段的结果。这使你能够实施一些行为,例如为不一样媒体类型选择不一样的序列化方案。
渲染器实例是由内容协商阶段选择的。
表示内容协商阶段接受的 media type 的字符串。
REST framework 提供了灵活的认证方式:
request.user
一般会返回 django.contrib.auth.models.User
的一个实例,但其行为取决于正在使用的身份验证策略。
若是请求未经身份验证,则 request.user
的默认值是 django.contrib.auth.models.AnonymousUser
的实例(就是匿名用户)。
关于 .user
的更多内容,之后再说~
request.auth
返回任何附加的认证上下文(authentication context)。request.auth
的确切行为取决于正在使用的身份验证策略,但它一般多是请求通过身份验证的令牌(token)实例。
若是请求未经身份验证,或者没有附加上下文(context),则 request.auth
的默认值为 None
。
关于 .auth
的更多内容,之后再说~
APIView
类或 @api_view
装饰器将确保根据视图上设置的 authentication_classes
或基于 settings
文件中的 DEFAULT_AUTHENTICATORS
设置将此属性(.authenticators
)自动设置为 Authentication
实例列表。
**一般不须要关注该属性...... **
注意:调用
.user
或.auth
属性时可能会引起WrappedAttributeError
异常。这些错误源于 authenticator 做为一个标准的AttributeError
,为了防止它们被外部属性访问修改,有必要从新提高为不一样的异常类型。Python 没法识别来自 authenticator 的AttributeError
,并会当即假定请求对象没有.user
或.auth
属性。authenticator 须要修复。
多说几句
.authenticators
其实存的就是当前使用的认证器(authenticator)列表,打印出来大概是这样:
[<rest_framework.authentication.SessionAuthentication object at 0x7f8ae4528710>, <rest_framework.authentication.BasicAuthentication object at 0x7f8ae45286d8>]
复制代码
能够看到这里使用的认证器(authenticator)包括 SessionAuthentication
和 BasicAuthentication
。
REST framework 支持基于浏览器的 PUT
,PATCH
,DELETE
表单。
request.method
返回请求 HTTP 方法的大写字符串表示形式。如 GET
,POST
...。
透明地支持基于浏览器的 PUT
,PATCH
和 DELETE
表单。
更多相关信息之后再说~
request.content_type
返回表示 HTTP 请求正文的媒体类型(media type)的字符串对象(好比: text/plain
, text/html
等),若是没有提供媒体类型,则返回空字符串。
一般不须要直接访问此属性,通常都依赖与 REST 框架的默认请求解析行为。
不建议使用 request.META.get('HTTP_CONTENT_TYPE')
来获取 content type 。
更多相关信息之后再说~
request.stream
返回一个表明请求主体内容的流。
一般不须要直接访问此属性,通常都依赖与 REST 框架的默认请求解析行为。
因为 REST framework 的 Request
扩展于 Django 的 HttpRequest
,全部其余标准属性和方法也可用。例如request.META
和 request.session
字典均可以正常使用。
请注意,因为实现缘由,Request
类不会从 HttpRequest
类继承,而是使用组合扩展类(优先使用组合,而非继承,恩,老铁没毛病 0.0)
靠 google 翻译加我的理解写的,请轻点喷(好方)。
而后,打算把官网的 API 指南都过一遍,因此就打算整理成中文的,方便之后看,并且本身动手写一遍更加便于理解,记忆。
没看官网 tutorial 的建议先看一遍吧,有人翻译过: Django Rest Framework 中文版教程