drf—— drf的请求与响应

摘要:
data不能是复杂结构的数据,如Django的模型类对象,对于这样的数据我们可以使用Serializer序列化器序列化处理后再传递给data参数。参数说明:data:为响应准备的序列化处理后的数据;status:状态码,默认200;template_name:模板名称,如果使用HTMLRenderer时需指明;headers:用于存放响应头信息的字典;content_type:响应数据的Content-Type,通常此参数无需传递,RESTframework会根据前端所需类型数据来设置该参数。
一、Request
#常用属性
    -data :前端以post请求提交的数据都在它中
    -FILES :前端提交的文件
    -query_params:就是原来的request.GET
    -重写了 __getattr__
        -使用新的request.method其实取得就是原生request.method(通过反射实现)
二、Response

1.全局&局部配置模板的显示方式

rest_framework.response.Response

#通过配置,选择默认模板的显示形式(浏览器方式,json方式)
    -配置文件方式(全局)
        -如果没有配置,默认有浏览器和json
            -drf有默认配置文件
            from rest_framework.settings importDEFAULTS
            REST_FRAMEWORK ={
            'DEFAULT_RENDERER_CLASSES': (  #默认响应渲染类
                'rest_framework.renderers.JSONRenderer',  #json渲染器
                'rest_framework.renderers.BrowsableAPIRenderer',  #浏览API渲染器
)
            }
    -在视图类中配置(局部)
        -粒度更小
        -classBookDetail(APIView):
            renderer_classes=[JSONRenderer,]

2.Response构造

源码内构造方式: Response(data, status=None, template_name=None, headers=None, content_type=None)
####

data数据不要是render处理之后的数据,只需传递python的内建类型数据即可,REST framework会使用renderer渲染器处理data

data不能是复杂结构的数据,如Django的模型类对象,对于这样的数据我们可以使用Serializer序列化器序列化处理后(转为了Python字典类型)再传递给data参数。

参数说明:

  • data: 为响应准备的序列化处理后的数据;
  • status: 状态码,默认200;
  • template_name: 模板名称,如果使用HTMLRenderer时需指明;
  • headers: 用于存放响应头信息的字典;
  • content_type: 响应数据的Content-Type,通常此参数无需传递,REST framework会根据前端所需类型数据来设置该参数。

3.常用属性

#常用属性

    -from rest_framework.response importResponse
    -data:响应的字典
    -status:http响应的状态码
        -drf提供给你了所有的状态码,以及它的意思
        from rest_framework.status importHTTP_201_CREATED
    -template_name:模板名字(一般不动),了解
    -headers:响应头,字典
    -content_type:响应的编码方式,了解
    
    
 #自己封装一个Response对象
      classCommonResponse:
        def __init__(self):
            self.code=100self.msg=''@property
        defget_dic(self):
            return self.__dict__
#自己封装一个response,继承drf的Response

4.状态码

为了方便设置状态码,REST framewrok在rest_framework.status模块中提供了常用状态码常量

#1)信息告知 - 1xx
HTTP_100_CONTINUE
HTTP_101_SWITCHING_PROTOCOLS

#2)成功 - 2xx
HTTP_200_OK
HTTP_201_CREATED
HTTP_202_ACCEPTED
HTTP_203_NON_AUTHORITATIVE_INFORMATION
HTTP_204_NO_CONTENT
HTTP_205_RESET_CONTENT
HTTP_206_PARTIAL_CONTENT
HTTP_207_MULTI_STATUS

#3)重定向 - 3xx
HTTP_300_MULTIPLE_CHOICES
HTTP_301_MOVED_PERMANENTLY
HTTP_302_FOUND
HTTP_303_SEE_OTHER
HTTP_304_NOT_MODIFIED
HTTP_305_USE_PROXY
HTTP_306_RESERVED
HTTP_307_TEMPORARY_REDIRECT

#4)客户端错误 - 4xx
HTTP_400_BAD_REQUEST
HTTP_401_UNAUTHORIZED
HTTP_402_PAYMENT_REQUIRED
HTTP_403_FORBIDDEN
HTTP_404_NOT_FOUND
HTTP_405_METHOD_NOT_ALLOWED
HTTP_406_NOT_ACCEPTABLE
HTTP_407_PROXY_AUTHENTICATION_REQUIRED
HTTP_408_REQUEST_TIMEOUT
HTTP_409_CONFLICT
HTTP_410_GONE
HTTP_411_LENGTH_REQUIRED
HTTP_412_PRECONDITION_FAILED
HTTP_413_REQUEST_ENTITY_TOO_LARGE
HTTP_414_REQUEST_URI_TOO_LONG
HTTP_415_UNSUPPORTED_MEDIA_TYPE
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE
HTTP_417_EXPECTATION_FAILED
HTTP_422_UNPROCESSABLE_ENTITY
HTTP_423_LOCKED
HTTP_424_FAILED_DEPENDENCY
HTTP_428_PRECONDITION_REQUIRED
HTTP_429_TOO_MANY_REQUESTS
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS

#5)服务器错误 - 5xx
HTTP_500_INTERNAL_SERVER_ERROR
HTTP_501_NOT_IMPLEMENTED
HTTP_502_BAD_GATEWAY
HTTP_503_SERVICE_UNAVAILABLE
HTTP_504_GATEWAY_TIMEOUT
HTTP_505_HTTP_VERSION_NOT_SUPPORTED
HTTP_507_INSUFFICIENT_STORAGE
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED

免责声明:文章转载自《drf—— drf的请求与响应》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE通过http方式 post天气,并合成语音下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python3自定义http/https请求拦截mitmproxy脚本

[本文出自天外归云的博客园] 脚本内容 代码如下: from mitmproxy importhttp, ctx from multiprocessing importLock classFilter: def __init__(self, filter_info): self.log_info = "" s...

Iframe父子窗口之间的跨域事件调用和传值

实现方案1:location.hash传值 父页面:parent.html(所在域:www.parent.com) 子页面:child.html(所在域:www.child.com) 要实现父子页面双向的事件调用和传值,需要多加一个代理页面,主要用于子页面调用父页面的方法 代理页面:proxy.html(所在域:www.parent.com)必须与父页面在...

XMLHTTP使用具体解释

XMLHTTP对象是Microsoft的MSXML开发包中带的一个用HTTP,XML协议訪问web资源的对象. 从MSXML3.0開始出现. 它在AJAX技术中主要用来从其它网络资源获取信息,然后由javascript来更新页面中的部分内容. 採用这样的方法将页面可更新内容细化,不须要更新非常少的内容而刷新整个页面.   XMLHTTP对象的用法例如以...

WebSocket 详解

HTTP 协议在设计上就是一个单向的网络协议,服务器只能被动的接收请求,然后返回相应的数据。对于需要双向通信的场景,虽然可以通过轮询,Comet 等方式实现,但每次链接都要三次握手,效率低下。 与http比较: 1.都基于 TCP 的、应用层的可靠性传输协议 2.WebSocket 在握手时的数据是通过 HTTP 传输的,一旦连接建立后就不再依赖 HTT...

跨域大全

正常ajax请求表现 跨域类型: 跨域,指一个域下的文档或脚本试图去请求另一个域下的资源,ajax跨域只是属于浏览器"同源策略"中的一部分,其它的还有: 0)Cookie跨域iframe跨域,LocalStorage跨域 1.) 资源跳转: A链接、重定向、表单提交 2.) 资源嵌入:<link>、<script>、<i...

JSP上传视频等大文件

前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。 一. Http协议原理简介      HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于19...