序列化是很重要的过程, 在构建数据结构的时候, 往往会出现很多意想不到的问题, 有一些参数你要用, 但是没有办法穿过来, 怎么办>

今天这篇博客就是写我之前的一个小项目中用restframework的时候的一些发现

在序列化器中使用request

所有跟请求相关的参数都封装到了request中, 在序列化器中使用request是很重要的

有一个前提条件, 就是视图要写CBV, 并且要继承ListAPIView, ModelViewSet, 因为只有在获取序列化器的时候才封装了一些参数, 其中包括request

看下面的源码, 以ListAPIView为示例

在ListAPIView中get请求对应list()

class ListModelMixin(object):
"""
List a queryset.
""" def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset()) # 对获取ORM集合进行过滤 page = self.paginate_queryset(queryset) # 对过滤好的数据进行分页
if page is not None:
serializer = self.get_serializer(page, many=True) # 获取序列化器, 对分页好的数据进行序列化
return self.get_paginated_response(serializer.data) # 直接返回Response对象 serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)

在获取序列化器是在实例化序列化器对象是传递了一些参数

    def get_serializer(self, *args, **kwargs):
"""
Return the serializer instance that should be used for validating and
deserializing input, and for serializing output.
"""
serializer_class = self.get_serializer_class()
kwargs['context'] = self.get_serializer_context() # 获取参数集合, 封装参数到kwargs的context中
return serializer_class(*args, **kwargs) # 将kwargs封装到序列化器对象中

现在来看看get_serializer_context() 中做了些什么

    def get_serializer_context(self):
"""
Extra context provided to the serializer class.
"""
return {
'request': self.request,
'format': self.format_kwarg,
'view': self
}

返回了一个字典包括request对象, 视图函数, 所以在序列化器对象的kwargs的context就能获取到这个字典, 拿到这里面的参数

最新文章

  1. [数据科学] 从csv, xls文件中提取数据
  2. linux php bom
  3. tomcat URL乱码问题
  4. C++字符串与转移字符
  5. 我的HTML笔记
  6. 高性能web站点建设(一)
  7. 配置Myeclipse中的项目部署到服务器,报the selected server is enabled, but is not configured properly.
  8. JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
  9. FPC Trace Pattern Layout Design Notices (軟板線路設計注意事項)
  10. (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)四种数据库操作C#代码
  11. 个人计算机安装hadoop全分布
  12. Spring(一)
  13. mysql 索引类型
  14. Node.js平台的一些使用总结
  15. .Net Core SignalR 实时推送信息
  16. 575. Distribute Candies
  17. java高精度学习笔记
  18. mazing ASP.NET Core 2.0【转】
  19. Yii restful api跨域
  20. Redis Cluster 4.0高可用集群安装、在线迁移操作记录

热门文章

  1. 关于ios 10 的新的部分
  2. javascript tips and snippets
  3. Data Flow ->> OLE DB Destination ->> Fast Load
  4. Python文件夹与文件的操作 ZZ
  5. JavaScript返回上一页
  6. MongoDB创建集合、删除集合
  7. AWK入门指南
  8. 在js文件中写el表达式取不到值的原因及解决方法
  9. tomcat部署web项目方法
  10. win764 ping不能用的问题