一个十分常见的需求:根据某个/某些字段进行过滤(查询)得出结果(全匹配)
django_filters
使用rest framework
官方的django_filters
开源查询过滤引擎,就可以在视图,或全局设置查询过滤引擎
1. 安装和注册 django_filters
- 安装
pip install django_filters
pip install -i https://pypi.douban.com/simple django-filter
- 使用:在
settting.py
中,注册全局查询过滤引擎(相当于一个app
)
INSTALLED_APPS = [
'django_filters'
]
2. 在视图中指定查询过滤引擎
- 在view视图类中指定
# 1.导包
from django_filters.rest_framework import DjangoFilterBackend
# 2. 指定查询查询过滤引擎
filter_backends = [DjangoFilterBackend]
# 3.指定需要用来进行查询的字段
filterset_fields = ['name', 'tester']
- 在全局指定查询过滤引擎
- 在
settting.py
中,指定全局查询过滤引擎
REST_FRAMEWORK = {
"DEFAULT_RENDERER_CLASSES": (
"rest_framework.renderers.JSONRenderer",
"rest_framework.renderers.BrowsableAPIRenderer",
),
# 设置全局过滤引擎
'DEFAULT_FILTER_BACKENDS':[
# 设置排序过滤引擎
'rest_framework.filters.OrderingFilter',
# 设置查询过滤引擎
'django_filters.rest_framework.backends.DjangoFilterBackend'
],
}
- 在需要进行查询过滤的
view
视图中,指定需要用来进行查询的字段
# 指定需要用来进行查询的字段
filterset_fields = ['name', 'desc']
3.请求接口,获取过滤后的数据
请求的格式:接口url/ 查询的key==查询的value
过滤得到响应数据中name='测试'
的数据,其余的不返回
# 发出请求:查询的key==查询的value
http -v : xxx/projects?name=="测试"