【djangorestframework】1、Requests(请求)
Requests
- 如果你正在做基于REST的Web服务的东西..你应该忽略request.post
- REST framework的Request类扩展了标准的HttpRequest,增加了对REST framework灵活的请求解析和请求认证的支持
请求解析
- REST framework的Request对象提供了灵活的请求解析,允许你使用JSON数据或其他媒体类型像通常处理表单数据相同的方式处理请求
- .data
- request.data返回请求主题的解析内容。这与标准的request.POST和request.FILES属性类似,除了:
- 它包括所有解析的内容,包括文件和非文件输入。
- 它支持解析POST以外的HTTP方法的内容,这意味着你可以访问PUT和PATCH请求的内容
- 它支持REST framework的灵活请求解析,而不仅仅是支持表单数据。例如:你可以像处理传入表单数据一样处理传入的JSON数据
- .query_params
- request.query_params是request.GET更准确的命名同义词
- 为了使代码内部更清晰,推荐使用request.query_params。而不是Django的标准request.GET。这样做有助于保持代码库更加准确和明显--任何HTTP方法类型都可能包含查询参数,而不仅仅是GET请求
- .parsers
- APIView类或@api_view装饰器将根据视图上设置的parser_classes或根据DEFAULT_PARSER_CLASSES设置确保将此属性自动设置为Parser实例列表。
- 通常不需要访问此属性。
"""
注意:
如果客户端发送格式错误的内容,则访问request.data可能会引发ParseError。默认情况下,REST framework的APIView类或@api_view装饰器将捕获错误并返回400 Bad Request响应。
如果客户端发送的请求的内容类型无法解析,则会引发UnsupportedMediaType异常,默认情况下会被捕获并返回415 Unsupported Media Type响应
"""
内容协商(Content negotiation)
- 请求公开了一些属性,这些属性允许你确定内容协商阶段的结果。这允许你实现一些行为,例如为不同的媒体类型选择不同的序列化方案
- .accepted_renderer
- 渲染器实例是由内容协商阶段选择的
- .accepted_media_type
- 内容协商阶段被接受的字符串表示的媒体类型
认证(Authentication)
- REST framework提供灵活的每个请求认证,使能够:
- 为你的API的不同部分使用不同的身份验证策略
- 支持使用多个身份验证策略
- 提供与传入请求关联的用户和令牌信息
- .user
- request.user通常会返回django.contrib.auth.models.User的一个实例,但其行为取决于正在使用的身份验证策略
- 如果请求未经身份验证,则request.user的默认值是django.contrib.auth.models.AnonymousUser的实例。
- .auth
- request.auth返回任何附加的认证上下文。request.auth的确切行为取决于正在使用的身份验证策略,但它通常可能是请求通过身份验证的令牌实例。
- 如果请求未经身份验证,或者没有附加上下文,则request.auth的默认值为None
- .authenticators
- APIView类或@api_view装饰器将根据视图上设置的authentication_classes或根据DEFAULT_AUTHENTICATORS设置确保将此属性自动设置为Authentication实例列表,
- 通常不需要访问此属性
"""
注意:
调用.user或.auth属性时可能会引发WrappedAttributeError异常。这些错误源自认证器(authenticator)作为标准AttributeError,但是为了防止它们被外部属性访问修改,有必要重新设置为不同的异常类型。Python将无法识别来自认证器(authenticator)的AttributeError,并会立即假定请求对象没有.user或.auth属性。认证器(authenticator)需要修复
"""浏览器增强
- REST framework支持一些浏览器增强功能,例如基于浏览器的PUT、PATCH和DELETE表单。
- .method
- request.method返回大写字符串表示的请求HTTP方法
- 透明地支持基于浏览器的PUT、PATCH和DELETE表单
- .content_type
- request.content_type返回表示HTTP请求正文的媒体类型的字符串对象,如果没有提供媒体类型,则返回空字符串。
- 你通常不需要直接访问请求的内容类型,因为通常会依赖REST framework的默认解析行为
- 如果确实需要访问请求的内容类型,则应该优先使用.content_type属性,而不是使用request.META.get('HTTP_CONTENT_TYPE'),因为它为基于浏览器的非表单内容提供了透明支持
- .stream
- .stream返回一个代表请求主体内容的流
- 通常不需要直接访问请求的内容,因为通常会依赖REST framework的默认请求解析行为
标准的HttpRequest属性
- 由于REST framework的Request扩展了Django的HttpRequest,所有其他标准属性和方法也可用。例如request.META和request.session字典可以正常使用
- 请注意,由于实现原因,Request类不会从HttpRequest类继承,而是使用组合扩展类。
本文来自博客园,作者:郭祺迦,转载请注明原文链接:https://www.cnblogs.com/guojie-guojie/p/16190563.html

浙公网安备 33010602011771号