美文网首页
reful实现分页、过滤、搜索、软删除

reful实现分页、过滤、搜索、软删除

作者: kris_lp | 来源:发表于2018-05-09 13:56 被阅读0次

一、分页

1.配置setting.py

REST_FRAMEWORK = {
    # 实现分页
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 2,

二、搜索

1.配置setting.py

# 配置restful api 返回结果
REST_FRAMEWORK = {
    # 实现过滤
    'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',
                                'rest_framework.filters.SearchFilter'),
}

2.在views中加入过滤功能

class StudentEdit(mixins.ListModelMixin,
                  mixins.RetrieveModelMixin,
                  mixins.UpdateModelMixin,
                  mixins.DestroyModelMixin,
                  mixins.CreateModelMixin,
                  viewsets.GenericViewSet):

    # 查询所有信息
    queryset = Student.objects.all()
    # 序列化
    serializer_class = StudentSerializer
    # 筛选/搜索
    filter_class = StuFilter

3.创建类,继承filters.FilterSet类

变量名 = django_filters.CharFilter(参数1,参数2),参数1时数据库的属性名,参数2可以指定匹配模式,如icontains模糊匹配,如果想要精确匹配,不需要设置第二个参数。

import django_filters
from rest_framework import filters

from stu.models import Student


class StuFilter(filters.FilterSet):
    # 自定义过滤信息
    # 在Student中获取s_name = 指定内容的记录
    # lookup_expr 指定匹配模式 icontains 模糊匹配
    name = django_filters.CharFilter('s_name', lookup_expr='icontains')
    tel = django_filters.CharFilter('s_tel')
    status = django_filters.CharFilter('s_status')
    # 查询数据库中s_operate_time 大于获取的operate_time_min
    operate_time_min = django_filters.DateTimeFilter('s_operate_time', lookup_expr='gt')
    # 查询数据库中s_operate_time 小于获取的operate_time_max
    opertate_time_max = django_filters.DateTimeFilter('s_operate_time', lookup_expr='lt')
    yuwen_min = django_filters.NumberFilter('s_yuwen', lookup_expr='gte')
    yuwen_max = django_filters.NumberFilter('s_yuwen', lookup_expr='lte')

    class Meta:
        model = Student
        # fields中的参数可以不写
        fields = ['s_name', 's_tel']

三、过滤

# 过滤数据
    def get_queryset(self):
        query = self.queryset
        # 只显示未删除的学生,即s_delete=0
        # 按照id递减排序显示
        return query.filter(s_delete=0).order_by('-id')

四、软删除

软删除意思就是当操作删除一条记录时并不是真正的删除,而是修改这个记录delete属性的值,通常delete取布尔值,true表示已经删除,false表示未删除。

1.在模型中增加属性存储delete的值

s_delete = models.BooleanField(default=0)

2.重写destory方法

# 软删除 重构destory方法
    def destroy(self, request, *args, **kwargs):
        # 获取实例对象
        instance = self.get_object()
        instance.s_delete = 1
        instance.save()
        return Response({'msg': '删除成功', 'code': 200})

相关文章

  • reful实现分页、过滤、搜索、软删除

    一、分页 1.配置setting.py 二、搜索 1.配置setting.py 2.在views中加入过滤功能 3...

  • 关于ES6的find

    在项目中,一些没分页的列表的搜索功能由前端来实现,搜索一般分为精确搜索和模糊搜索。搜索也要叫过滤,一般用filte...

  • SearchView配合RecyclerView实现分页搜索过滤

    在日常开发中,我们会遇到一种需求,就是通过输入关键字快速的查询当前列表中的数据并进行过滤显示。(感觉好难用文字描述...

  • 品牌案例

    实现表格添加、删除、搜索、日期过滤器。 如果需要异步访问后台完成上述操作: 初始获取数据时,在created()钩...

  • CI分页搜索实现

    CI分页搜索实现 分类:php学习笔记2013-10-28 16:13992人阅读评论(2)收藏举报 ci分页搜索...

  • 2020-03-01

    第7章 商品搜索 学习目标 根据搜索关键字查询 条件筛选 规格过滤 价格区间搜索 分页查询 排序查询 高亮查询 1...

  • Laravel 数据删除以及软删除

    所谓软删除指的是数据表记录并未真的从数据库删除,而是将表记录的标识状态标记为软删除,这样在查询的时候就可以加以过滤...

  • PHP与mysql的分页功能

    今天想实现博客内容的分页,想通过源代码来实现简单的分页,在网上搜索了相关原理,了解到一些内容,大致如下: 1.分页...

  • 数据的软删除—什么时候需要?如何去实现?

    阅读完本文你将会学会 什么是软删除? 如何考量是否使用软删除 如何在Spring里实现软删除 1. 前言 我们在开...

  • Django rest framework 搜索、排序和分页

    搜索和排序都是 rest framework 的 filters 过滤中的一部分。分页是 rest framewo...

网友评论

      本文标题:reful实现分页、过滤、搜索、软删除

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