zoukankan      html  css  js  c++  java
  • restframework中的那些参数你知道吗?

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

    今天这篇博客就是写我之前的一个小项目中用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就能获取到这个字典, 拿到这里面的参数

  • 相关阅读:
    [No000068]document.body.clientHeight 和 document.documentElement.clientHeight 的区别
    [No000067]Js中获取当前页面的滚动条纵坐标位置scrollTop
    jquery 给a标签绑定click
    java 延时
    MySQL建表语句+添加注释
    ubuntu 搜狗输入法内存占用太多,卡顿不够处理办法
    org.apache.http.client.HttpClient使用方法
    json 文件打读取
    bootStrap @media 用法
    java web项目获取项目路径
  • 原文地址:https://www.cnblogs.com/594504110python/p/10365169.html
Copyright © 2011-2022 走看看