restframework中的那些参数你知道吗?
2024-08-25 03:43:02
序列化是很重要的过程, 在构建数据结构的时候, 往往会出现很多意想不到的问题, 有一些参数你要用, 但是没有办法穿过来, 怎么办>
今天这篇博客就是写我之前的一个小项目中用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就能获取到这个字典, 拿到这里面的参数
最新文章
- [数据科学] 从csv, xls文件中提取数据
- linux php bom
- tomcat URL乱码问题
- C++字符串与转移字符
- 我的HTML笔记
- 高性能web站点建设(一)
- 配置Myeclipse中的项目部署到服务器,报the selected server is enabled, but is not configured properly.
- JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
- FPC Trace Pattern Layout Design Notices (軟板線路設計注意事項)
- (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)四种数据库操作C#代码
- 个人计算机安装hadoop全分布
- Spring(一)
- mysql 索引类型
- Node.js平台的一些使用总结
- .Net Core SignalR 实时推送信息
- 575. Distribute Candies
- java高精度学习笔记
- mazing ASP.NET Core 2.0【转】
- Yii restful api跨域
- Redis Cluster 4.0高可用集群安装、在线迁移操作记录