美文网首页
day50-restframework总结及数据过滤

day50-restframework总结及数据过滤

作者: barriers | 来源:发表于2019-01-12 23:53 被阅读0次

    to_representation 修改序列化的值
    get_queryset 过滤信息
    get_object 获取过滤数据

    1 手动添加字段条件过滤

    在视图文件下(views.py文件)

    class StuView(viewsets.GenericViewSet,
              mixins.ListModelMixin, # 查看所有资源,GET
              mixins.RetrieveModelMixin, # 查看指定id的资源 ,GET
              mixins.DestroyModelMixin, # 删除指定的资源 ,DELETE
              mixins.CreateModelMixin, # 创建资源 ,POST
              mixins.UpdateModelMixin): # 修改资源 ,PUT/PATCH
        queryset = Student.objects.all()#指定资源返回的内容
        serializer_class = StuSerializer# 资源(queryset)序列化的结果
        filter_class = StuFilter  运用自己定义的过滤类对数据进行过滤
        def get_queryset(self):
            queryset = self.queryset
            s_name = self.request.query_params.get('s_name')
            if s_name:
                   获取未被删除且名字中含有输入的字的人
                result = queryset.filter(is_delete=0, s_name__contains=s_name)
            else:
                result = queryset.filter(is_delete=0)
            return result
    

    2引入第三方库进行过滤

    在定义过滤信息前需要在settings中添加相关设置

    'DEFAULT_FILTER_BACKENDS': (
        'django_filters.rest_framework.DjangoFilterBackend',
    )
    

    然后在当前应用下新建一个filters.py文件,在这个文件中写过滤信息

    import django_filters
    from app.models import Student
    class StuFilter(django_filters.rest_framework.FilterSet):
        # 引入第三方库进行过滤定义过滤类
        # 指定模糊查询过滤的字段
        name = django_filters.CharFilter('s_name', lookup_expr='contains')
        前面的name为浏览器请求中问号后传的参,后面为数据库中的字段
        # 不加lookup_expr = 'contains'就是精确查询,加就是模糊查询
        age0 = django_filters.CharFilter('s_age', lookup_expr='gt')
        age1 = django_filters.CharFilter('s_age', lookup_expr='lt')
        上面的过滤条件既可以只过滤一条,也可以同时过滤上面的几个
        class Meta:
            model = Student
            fields = ['name', 'age0', 'age1']
    

    在上面的name = django_filters.CharFilter('s_name', lookup_expr='contains')语句中,前面的name为浏览器请求中问号后传的参,后面为数据库中的字段;不加lookup_expr = 'contains'就是精确查询,加就是模糊查询
    上面的过滤条件如果只传了一个参数就只过滤一条,如果传了多个参数就过滤多个对应的信息

    3安装toolbar测试工具

    先安装库:pip install django-debug-toolbar
    然后在settings中ALLOWED_HOSTS后面添加INTERNAL_IPS = ("127.0.0.1",)(添加测试ip)
    中间件中添加中间件:'debug_toolbar.middleware.DebugToolbarMiddleware', # 添加debug中间件
    添加应用:'debug_toolbar.apps.DebugToolbarConfig',
    工程路由文件最后添加:

    if DEBUG:
        import debug_toolbar
        urlpatterns.append(re_path(r'^__debug__/', include(debug_toolbar.urls)))
    

    相关文章

      网友评论

          本文标题:day50-restframework总结及数据过滤

          本文链接:https://www.haomeiwen.com/subject/gsuhdqtx.html