请求与相应

请求与相应

请求Request

1 继承了APIView后,request被分装成了APIView的request
2 request.data : POST,PUT请求的数据
3 request.query_params : GET请求的数据


以后如果使用了drf,继承APIView(drf提供了很多view,他们都是继承自APIView),执行流程如下
	-包装出了一个新的request,在视图函数中使用时,跟原来没有区别
    -注意:取post提交的数据,不要从request.POST中取了,要从request.data中取
    -注意:取get提交的数据,尽量不从request.GET中取了,要从request.query_params中取
    @property
    def query_params(self):
        return self._request.GET

响应Response

drf中的Response继承了SimpleTemplateResponse--继承了-->Django的HttpResponse
参数属性:
	data=None,    # ser.data,传字典或列表,序列化成json格式字符串给前端
    status=None,  #状态码:http响应的状态码
    template_name=None, #模板名字,在浏览器访问,看到的好看的模板(自定制)
    headers=None,       # 响应头,字典
    exception=False,    # 不用管
    content_type=None   # 响应编码类型
需要掌握:data,status,headers
	status可以用状态码,也可以用模块rest_framework.status里的常数
	status=201===>status=status.HTTP_201_CREATED
完整的相应返回:
    response={'code':100,'msg':'查询成功','result':ser.data}
    return Response(response,status=201,headers={'xxx':"xxx"}

通过配置可以修改相应的格式(浏览器的模板样式或纯json数据)
	1 全局修改:在配置文件中加上drf的配置专项,drf的配置都写在这个字典中
		REST_FRAMEWORK={
            'DEFAULT_RENDERER_CLASSES': [ #配置响应格式
                'rest_framework.renderers.JSONRenderer',  # json格式
                'rest_framework.renderers.BrowsableAPIRenderer',  # 浏览器模板
            ]}
                    
                    
	2 局部修改:写在视图类上,影响当前这个视图类类
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
renderer_classes = [JSONRenderer,BrowsableAPIRenderer]

状态码

rest_framework.statu模块中提供的状态码

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

posted @ 2021-07-23 21:16  zheng-sn  阅读(90)  评论(0)    收藏  举报