• RESR API (一)之Requests


    Requests

    如果您正在做基于REST的Web服务,您应该忽略request.POST。

    - Malcom Tredinnick,Django开发团队

    REST框架的Request类扩展了标准的HttpRequest,增加了对REST框架请求解析和请求认证的支持。


    Request parsing

    REST框架的Request对象提供了灵活的请求解析,允许您以与通常处理表单数据相同的方式处理JSON数据或其他媒体类型的请求。(REST framework's Request objects provide flexible request parsing that allows you to treat requests with JSON data or other media types in the same way that you would normally deal with form data.)

    .data

    request.data返回请求体的解析内容。这与标准的request.POSTrequest.FILES属性相似,除了:

    • 它包括所有解析的内容,包括文件和非文件输入。
    • 它支持解析除POST以外的HTTP方法的内容,这意味着您可以访问PUTPATCH请求的内容。
    • 它支持REST框架的灵活的请求解析,而不只是支持表单数据。例如,您可以像处理表单数据那样处理JSON数据。

    有关详细信息,请参阅解析器文档

    .query_params

    request.query_paramsrequest.GET的一个同义词,但表达的含义比request.GET更准确。

    建议使用request.query_params,而不使用Django标准的request.GET。这样有助于让代码更准确和可读 - 因为任何HTTP方法类型可能包括query参数,而不仅仅是GET请求。

    .parsers

    The APIView class or @api_view decorator will ensure that this property is automatically set to a list of Parser instances, based on the parser_classes set on the view or based on the DEFAULT_PARSER_CLASSES setting.

    通常您不需要访问此属性。


    注意:如果客户端发送的内容格式不正确,则访问request.data可能会抛出ParseError。默认情况下,REST框架的APIView类或@api_view装饰器将捕获错误并返回400 Bad Request响应。

    如果客户端发送的内容的类型不能被解析,那么将会抛出UnsupportedMediaType异常,默认情况下会被捕获并返回415 Unsupported Media Type响应。


    Content negotiation

    request公开了一些属性,允许您决定 the content negotiation stage 的结果。这允许您实现一些行为,例如为不同的媒体类型选择不同的序列化方案。

    .accepted_renderer

    由 the content negotiation stage 选择的 renderer实例。

    .accepted_media_type

     由 the content negotiation stage 接受的一个表示媒体类型的字符串。


    Authentication

    REST框架提供灵活的、per-request 的身份验证,使您能够:

    • 对API的不同部分使用不同的身份验证策略。
    • 支持使用多种认证策略。
    • 提供与传入请求相关联的用户和token信息。

    .user

    request.user通常返回一个django.contrib.auth.models.User实例,尽管行为取决于正在使用的身份验证策略。

    如果请求未经身份验证,request.user默认值为request.userdjango.contrib.auth.models.AnonymousUser的一个实例。

    有关详细信息,请参阅认证文档

    .auth

    request.auth返回任何其他的身份验证上下文。request.auth确切的行为取决于正在使用的身份验证策略,但它通常是被认证的请求token的一个实例。

    如果该请求是未认证的或者不存在附加的上下文,request.auth的默认为None

    有关详细信息,请参阅认证文档

    .authenticators

    The APIView class or @api_view decorator will ensure that this property is automatically set to a list of Authentication instances, based on the authentication_classes set on the view or based on the DEFAULT_AUTHENTICATORS setting.

    通常您不需要访问此属性。


    Browser enhancements

    REST框架支持的几个浏览器增强功能,例如基于浏览器的PUTPATCHDELETE forms

    .method

    request.method以大写字符串的形式返回request 的HTTP方法。

    基于浏览器的PUTPATCHDELETEforms 显然被支持。

    有关更多信息,请参阅浏览器增强文档

    .content_type

    request.content_type返回一个表示HTTP请求体媒体类型的字符串对象,如果没有提供媒体类型,则返回一个空字符串。

    通常您不需要直接访问请求的内容类型,因为您通常依赖于REST框架的默认请求解析行为。

    如果您确实需要访问请求的内容类型,则应优先使用.content_type属性而不是request.META.get('HTTP_CONTENT_TYPE'),因为它为基于浏览器的非表单内容提供transparent 支持。

    有关更多信息,请参阅浏览器增强文档

    .stream

    request.stream 返回一个表示请求体内容的流。

    通常您不需要直接访问请求的内容,因为您通常将依赖于REST框架的默认请求解析行为。


    标准HttpRequest属性

    Note that due to implementation reasons the Request class does not inherit from HttpRequest class, but instead extends the class using composition.

  • 相关阅读:
    “持咒”到底是个什么东西?再论语言和思维关系
    传说中的噪声
    电源噪声(EMI)滤波器的基本原理与应用方法
    Like a rock,like the weather man【转】
    allegro笔记
    Taxicab geometry和Euclidean geometry
    hql和sql的区别
    SpringMVC与Struts2的区别
    ExtJS 学习专题如何应用ExtJS
    编程式事务和声明式事务
  • 原文地址:https://www.cnblogs.com/qq_841161825/p/8983927.html
Copyright © 2020-2023  润新知