请求与相应
请求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