经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
drf—— drf的请求与响应
来源:cnblogs  作者:Ayca  时间:2020/11/9 16:06:40  对本文有异议

一、Request

  1. #常用属性
  2. -data :前端以post请求提交的数据都在它中
  3. -FILES :前端提交的文件
  4. -query_params:就是原来的request.GET
  5. -重写了 __getattr__
  6. -使用新的request.method其实取得就是原生request.method(通过反射实现)

二、Response

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

  1. rest_framework.response.Response
  2. # 通过配置,选择默认模板的显示形式(浏览器方式,json方式)
  3. -配置文件方式(全局)
  4. -如果没有配置,默认有浏览器和json
  5. -drf有默认配置文件
  6. from rest_framework.settings import DEFAULTS
  7. REST_FRAMEWORK = {
  8. 'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
  9. 'rest_framework.renderers.JSONRenderer', # json渲染器
  10. 'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
  11. )
  12. }
  13. -在视图类中配置(局部)
  14. -粒度更小
  15. -class BookDetail(APIView):
  16. renderer_classes=[JSONRenderer,]

2.Response构造

  1. 源码内构造方式: 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.常用属性

  1. #常用属性
  2.  
  3. -from rest_framework.response import Response
  4. -data:响应的字典
  5. -statushttp响应的状态码
  6. -drf提供给你了所有的状态码,以及它的意思
  7. from rest_framework.status import HTTP_201_CREATED
  8. -template_name:模板名字(一般不动),了解
  9. -headers:响应头,字典
  10. -content_type:响应的编码方式,了解
  11. # 自己封装一个Response对象
  12. class CommonResponse:
  13. def __init__(self):
  14. self.code=100
  15. self.msg=''
  16. @property
  17. def get_dic(self):
  18. return self.__dict__
  19. # 自己封装一个response,继承drf的Response

4.状态码

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

  1. #1)信息告知 - 1xx
  2. HTTP_100_CONTINUE
  3. HTTP_101_SWITCHING_PROTOCOLS
  4. #2)成功 - 2xx
  5. HTTP_200_OK
  6. HTTP_201_CREATED
  7. HTTP_202_ACCEPTED
  8. HTTP_203_NON_AUTHORITATIVE_INFORMATION
  9. HTTP_204_NO_CONTENT
  10. HTTP_205_RESET_CONTENT
  11. HTTP_206_PARTIAL_CONTENT
  12. HTTP_207_MULTI_STATUS
  13. #3)重定向 - 3xx
  14. HTTP_300_MULTIPLE_CHOICES
  15. HTTP_301_MOVED_PERMANENTLY
  16. HTTP_302_FOUND
  17. HTTP_303_SEE_OTHER
  18. HTTP_304_NOT_MODIFIED
  19. HTTP_305_USE_PROXY
  20. HTTP_306_RESERVED
  21. HTTP_307_TEMPORARY_REDIRECT
  22. #4)客户端错误 - 4xx
  23. HTTP_400_BAD_REQUEST
  24. HTTP_401_UNAUTHORIZED
  25. HTTP_402_PAYMENT_REQUIRED
  26. HTTP_403_FORBIDDEN
  27. HTTP_404_NOT_FOUND
  28. HTTP_405_METHOD_NOT_ALLOWED
  29. HTTP_406_NOT_ACCEPTABLE
  30. HTTP_407_PROXY_AUTHENTICATION_REQUIRED
  31. HTTP_408_REQUEST_TIMEOUT
  32. HTTP_409_CONFLICT
  33. HTTP_410_GONE
  34. HTTP_411_LENGTH_REQUIRED
  35. HTTP_412_PRECONDITION_FAILED
  36. HTTP_413_REQUEST_ENTITY_TOO_LARGE
  37. HTTP_414_REQUEST_URI_TOO_LONG
  38. HTTP_415_UNSUPPORTED_MEDIA_TYPE
  39. HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE
  40. HTTP_417_EXPECTATION_FAILED
  41. HTTP_422_UNPROCESSABLE_ENTITY
  42. HTTP_423_LOCKED
  43. HTTP_424_FAILED_DEPENDENCY
  44. HTTP_428_PRECONDITION_REQUIRED
  45. HTTP_429_TOO_MANY_REQUESTS
  46. HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
  47. HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS
  48. #5)服务器错误 - 5xx
  49. HTTP_500_INTERNAL_SERVER_ERROR
  50. HTTP_501_NOT_IMPLEMENTED
  51. HTTP_502_BAD_GATEWAY
  52. HTTP_503_SERVICE_UNAVAILABLE
  53. HTTP_504_GATEWAY_TIMEOUT
  54. HTTP_505_HTTP_VERSION_NOT_SUPPORTED
  55. HTTP_507_INSUFFICIENT_STORAGE
  56. HTTP_511_NETWORK_AUTHENTICATION_REQUIRED

 

原文链接:http://www.cnblogs.com/guojieying/p/13931789.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号