django rest framework使用django-filter用法

django rest framework使用django-filter注意事项:

一定要在setting文件里面加载如下代码,而不是只安装包,否则django应用不报错,但是不能正确过滤。

“`
INSTALLED_APPS = [
‘django_filters'
]

REST_FRAMEWORK = {
‘DEFAULT_FILTER_BACKENDS': ( ‘django_filters.rest_framework.DjangoFilterBackend',
),
}

补充知识:rest_framework--filters和django-filters混合使用-过滤搜索

view

from rest_framework.pagination import PageNumberPagination
from rest_framework import mixins
from rest_framework import viewsets
from rest_framework import filters

from django_filters.rest_framework import DjangoFilterBackend

from .models import Goods
from .serializers import GoodsSerializer
# 导入过滤器类
from .filters import GoodsFilter

class GoodsPagination(PageNumberPagination):
  page_size = 10
  page_size_query_param = "page_size"
  page_query_param = "p"
  max_page_size = 100

class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
  # 指定queryset
  queryset = Goods.objects.all()

  # 指定序列化类
  serializer_class = GoodsSerializer

  # 指定分页类
  pagination_class = GoodsPagination

  # 添加过滤器 这里可以吧django-filter过滤器添加进来 和 rest_framework的filters添加进来一起用, 也可以单个用, 看你的需求
  filter_backends = [DjangoFilterBackend, filters.SearchFilter]

  # 只需要简单的基于等同的过滤,则可以filter_fields在视图或视图集上设置属性,列出要过滤的字段集。
  # 等同就是根据你过滤的字段的数据必须跟数据库里那个字段的数据相同
  # filter_fields = ['name', 'shop_price']

  # 指定过滤器类
  filter_class = GoodsFilter

  search_fields = ['name', 'goods_brief', "goods_desc"]

过滤器类–根据自己需求定义

import django_filters

from .models import Goods

class GoodsFilter(django_filters.rest_framework.FilterSet):
  """
  商品的过滤类
  """

  # 大于这个值 name指定字段 lookup_expr过滤条件
  # NumberFilter 数字类型
  price_min = django_filters.NumberFilter(name="shop_price", lookup_expr="gte")
  # 小于这个值
  price_max = django_filters.NumberFilter(name="shop_price", lookup_expr="lte")

  # name模糊查询, 不指定过滤条件, 必须全部匹配
  # CharFilter字符串类型
  name = django_filters.CharFilter(name="name", lookup_expr="icontains")

  class Meta:
    # 指定模型类
    model = Goods
    # 显示这两个字段
    fields = ["price_min", "price_max", "name"]

settings

INSTALLED_APPS = [
  # drf过滤器 也 是xadmin的过滤器
  'django_filters',
  'rest_framework',
]

url

from django.conf.urls import url, include

from rest_framework.routers import DefaultRouter

from goods.views import GoodsListViewSet
# 生成一个注册器实例对象
router = DefaultRouter()
# 将需要自动生成url的接口注册
# 配置goods的url
router.register(r'goods', GoodsListViewSet, base_name="goods-list")

urlpatterns = [
  # 自动生成url
  url(r"^", include(router.urls)),
]

效果图

以上这篇django rest framework使用django-filter用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Django-rest-framework中过滤器的定制实例

    1.定义一个自定义的filter.py模块,增加一个新的过滤类 import django_filters #这个Q可以支持表查询,单下划线获取表字段,双下划线获取关联表, from django.db.models import Q #引入自己的模型 from app.item.models import ItemCategory #自定义的过滤类,需要继承django_filter.rest_framework中的FilterSet类 class ItemCategoryFilter(dja

  • django rest framework 数据的查找、过滤、排序的示例

    对于管理系统,常常需要展示列表数据,我们对于列表内的数据常常需要查找.过滤.排序等操作,其中查找等操作大部分是在后台进行的.django rest framework可以轻松的实现数据的查找.过滤等操作.接下来我们将以实际的例子进行介绍. 示例代码github地址: https://github.com/jinjidejuren/drf_learn 例如cmdb系统,作为资产管理系统常常需要对数据进行过滤或查找,获取期望的信息. 实现model 1.在这个示例项目中,需要实现对物理服务器的条件过

  • django rest framework 过滤时间操作

    通常我们会用到过滤两个时间段内的一些数据, 当我们用django rest framework的时候, 他可以根据字段filter_fields进行过滤, 但是对于日期来说并不起作用, 这个时候就需要我们设置重写queryset方法进行捕捉了 重写get_queryset() def get_queryset(self): start = self.request.query_params.get('fault_start_time', None) stop = self.request.que

  • django rest framework 自定义返回方式

    大家在用Django Rest Framework的时候会发现默认继承后,增删改查的返回信息都是一段data,这是因为我实际是状态码和信息你在调用api的时候是看不到的,仅仅如此么?并不是这样,在我前端调用后端的时候,实际上相关的code和msg是能看得到的,但是我们在普通的调用api他只是单单的返回data信息,这个是不够我们满足需求的,毕竟我们不仅仅需要用前端需调用,下面我们来自定义Response返回信息 Django(2.0) Django Rest Framework Python3.

  • Django Rest framework认证组件详细用法

    本文详细讲述了DRF认证组件的原理以及用法. 源码剖析 讲解DRF版本的时候我们都知道了,在dispatch方法里执行了initial方法来初始化我们的版本. 而在initial方法里有我们的认证.权限.频率组件,如下图: 我们再点进去认证组件看看: 可以看到,我们的权限组件返回的是request.user,那么这里返回的request是新的还是旧的呢? initial方法是在request重新赋值之后执行的,所以我们这里的request是新的--也就是Request类的实例化对象. 所以,这个

  • Django Rest framework权限的详细用法

    前言 我们都听过权限,那么权限到底是做什么的呢. 我们都有博客,或者去一些论坛,一定知道管理员这个角色, 比如我们申请博客的时候,一定要向管理员申请,也就是说管理员会有一些特殊的权利,是我们没有的. ==这些对某件事情决策的范围和程度,我们叫做权限==,权限是我们在项目开发中经常用到的. 本文将详细讲述DRF框架为我们提供的权限组件的使用方法. 源码剖析 DRF的版本控制.认证.权限.频率组件都在initial方法里初始化. 我们点进去看看: 其实我们版本.认证.权限.频率控制走的源码流程大致相

  • Django REST framework内置路由用法

    在urls.py文件中按照如下步骤写,即可正确使用DRF的内置路由. from .views import BookModel # 1. 导入我们的视图 from rest_framework.routers import DefaultRouter # 2. 导入rest_framework内置的路由方法 router = DefaultRouter() # 3. 首先,实例化一个DefaultRouter对象 router.register(r'book', BookModel) # 4.

  • Python3+PyCharm+Django+Django REST framework配置与简单开发教程

    一.说明 自己一是想跟上潮流二是习惯于直接干三是没有人可以请教,由于这三点经常搞得要死要活.之前只简单看过没写过Diango,没看过Django REST framework,今天一步到位直接上又撞上了南墙.在此记一下以备忘,也希望对后来者能有所帮助.本文相当于Django REST framework官方文档的重新实现. 1.1 Django是什么 Django是当下流行的一个python语言的web框架,类似于java的struts2,(如果struts2太旧不懂那也可以理解为spring

  • Django rest framework基本介绍与代码示例

    本文研究的主要是Django rest framework的相关内容,分享了example,具体如下. Django REST框架是构建Web API的强大而灵活的工具包. 您可能希望使用REST框架的一些原因: Web浏览的API是您的开发人员的巨大的可用性胜利. 验证策略包括OAuth1a和OAuth2的包. 支持ORM和非ORM数据源的序列化. 如果不需要功能更强大的功能,可以自定义一切 - 只需使用基于功能的常规视图. 广泛的文档和极好的社区支持. 由Mozilla,Red Hat,He

  • Django rest framework工具包简单用法示例

    本文实例讲述了Django rest framework工具包简单用法.分享给大家供大家参考,具体如下: Django rest framework 工具包做API非常方便. 下面简单说一下几个功能的实现方法. 实现功能为,匿名用户访问首页一分钟能访问3次,登录用户一分钟访问6次,只有登录用户才能访问order页面. 第一步,注册app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contri

  • Django REST framework视图的用法

    前言 在了解了REST farmwork封装的视图类之后,我对python的面向对象有了更深刻的理解. Django RESR framework框架内置的视图类充分发挥了面向对象封装与继承的特性. 自己写一个类似于DRF内置视图类的功能 实现一个图书出版社的增.删.改.查.查功能,两个查一个是查所有出版社,一个是查具体的某一个出版社. 首先是一个简略的表结构设计models.py: from django.db import models class Publisher(models.Mode

  • django model 条件过滤 queryset.filter(**condtions)用法详解

    1.下述代码查询model对应数据库中日期等于2018-05-22的数据: queryset = model.objects.all() condtions: {'date': '2018-05-22'} query_res = queryset.filter(**condtions) 2.下述代码查询model对应数据库中日期小于2018-05-22的数据: queryset = model.objects.all() condtions: {'date__lt': '2018-05-22'}

  • django rest framework使用django-filter用法

    django rest framework使用django-filter注意事项: 一定要在setting文件里面加载如下代码,而不是只安装包,否则django应用不报错,但是不能正确过滤. "` INSTALLED_APPS = [ 'django_filters' ] REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ( 'django_filters.rest_framework.DjangoFilterBackend', ), } 补充知识:re

  • django rest framework serializers序列化实例

    serializers是将复杂的数据结构变成json或者xml这个格式的 serializers有以下几个作用: - 将queryset与model实例等进行序列化,转化成json格式,返回给用户(api接口). - 将post与patch/put的上来的数据进行验证. - 对post与patch/put数据进行处理. 实现序列化二个类:Serializer与ModelSerializer 比较 ModelSerializer(Serializer) 即 ModelSerializer继承了Se

随机推荐