day50-restframework总结及数据过滤

2019-01-12  本文已影响0人  barriers

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)))
上一篇下一篇

猜你喜欢

热点阅读