玩转Django开发,你需要的一个插件

简介: 玩转Django开发,你需要的一个插件

看朋友圈今天算是所有的小伙伴都回来工作了,我们从今天开始回到Python开发技术的正题,毕竟这才是我们吃饭的家伙。


今天我们聊一个我日常开发常用到的一个包名叫Django-filter,这个包对于我们日常Django开发工作的筛选开发非常方便,只需要配置几行代码就能完成我们复杂的筛选。

我在前面介绍Swagger一文「超好用的API工具-Swagger」的时候提到过它,尤其是对于XXX系统管理页面处理起来简直不要太方便,下面且听我细细道来。


安装配置

这个工具安装很简单通过pip就进行

pip install django-filter

这里要说明下这里安装的最新的django-filter,默认新版本是要求Python3的,如果我们环境是Python2.7的需要安装django-filter 1.1.0版本的,另外这个包依赖djangorestframework框架,下面我简称DRF。


安装完,我们添加进INSTALLED_APPS

# settings.py
INSTALLED_APPS = [
    ...
    'rest_framework',
    'django_filters',
]
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': (
        'django_filters.rest_framework.DjangoFilterBackend',
        ...
    ),
}

这里把django-filter作为默认的backends,也可以在viewset里面写,见下文。


使用

使用的时候我们需要创建一个FilterSet类来进行过滤筛选,废话不多说,我们看一个代码。

from rest_framework import generics
from django_filters import rest_framework as filters
from myapp import Product
class ProductFilter(filters.FilterSet):
    min_price = filters.NumberFilter(field_name="price", lookup_expr='gte')
    max_price = filters.NumberFilter(field_name="price", lookup_expr='lte')
    class Meta:
        model = Product
        fields = ['category', 'in_stock', 'min_price', 'max_price']

上面这个代码展示了我们价格范围过滤,实际中我们还可以有更多筛选展示方式,

class ProductFilter(django_filters.rest_framework.FilterSet):
    class Meta:
        model = Product
        fields = {
            'order_id': ['exact'],
            'status': ['in'],
            'created_at': ['range'],
            'card__company_name': ['contains'],
            'card__email': ['exact'],
        }
class ProductList(generics.ListAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    filter_backends = (filters.DjangoFilterBackend,) # 这儿我们settings配置了就不需要配置了
    # filterset_class = ProductFilter # django-filter 2.1,python3
    filter_class = ProductFilter # django-filter 1.1, python2.7


上面我从时间范围选择,精确筛选,包含等几个维度展示了django-filter筛选的情况,满足绝大多数筛选情况了,另外我标注了filterset_class写法是在Django-filter 1.1之后,filter_class写法是在1.1之前版本,这里大家需要注意一下。


效果

从上面的代码大家看到了,我们通过把Django-filter集成到DRF中,关于日常筛选操作非常便捷有效,让我们的后端效率大大提高。自己即可以进行开发调试也能交付完整的接口给前端的同学,让大家对接起来更加开心愉快。

结合我前文说的Swagger,效果图如下。


image.png

关于Django-filter我们今天就介绍到这儿,完整实例代码放在github,公众号后台对话框回复「django-filter」获取,喜欢的同学可以持续关注,后续我会持续分享更多关于Django及DRF高效开发的插件或者第三包,让开发更加开心愉快。


相关文章
|
4月前
|
前端开发 数据库 Python
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
|
4月前
|
前端开发 数据库 Docker
一款可以直接使用的招聘网站, react django开发招聘网站,docker 部署
一款可以直接使用的招聘网站, react django开发招聘网站,docker 部署
50 0
|
2月前
|
前端开发 关系型数据库 MySQL
基于python+django+vue.js开发的社区养老管理系统
基于python+django+vue.js开发的社区养老管理系统
97 1
|
1天前
|
API 数据安全/隐私保护 Python
101-Django开发毕业设计学院ERM系统源码
使用Django框架开发的学校ERP系统旨在提升现代教育的管理效率。该系统针对学生、老师和管理员三类用户设计,提供登录、考勤管理、分数查看、课程表、教学管理等功能。技术栈包括Python 3.11和Django 5,以及djangorestframework用于API交互。系统实现了智能化的操作,优化了学校的管理平台,提高了服务水平和教学质量。
7 0
|
10天前
|
Python
Django开发——配置环境
Django开发——配置环境
|
4月前
|
SQL 数据库 开发者
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
|
25天前
|
前端开发 测试技术 数据库
【python】为什么使用python Django开发网站这么火?
【python】为什么使用python Django开发网站这么火?
|
2月前
|
前端开发 关系型数据库 MySQL
基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统
基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统
60 0
|
2月前
|
前端开发 关系型数据库 MySQL
基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统
基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统
45 2
|
2月前
|
数据库 开发者 Python
Python在Web开发中的应用:Flask与Django框架介绍与实践
Python在Web开发中的应用:Flask与Django框架介绍与实践