Django:DRF实现模糊搜索
2023-09-11 14:21:03 时间
直接干:
1、安装第三方包
pip install django-filter
2、settings.py的INSTALLED_APPS中注册应用
INSTALLED_APPS = [ ... ... 'django_filters', ]
同样settings中加上配置
REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], }
3、视图类中增加属性 filterset_fields
class ServerInfoList(generics.ListAPIView): """ 获取所有服务器信息 """ from django.db.models import Q # 使用orm的或查询Q相当于SQL的or关键字,查询集为状态为启用和禁用的 queryset = ServerInfo.objects.filter(Q(status=1) | Q(status=2)).order_by('-update_time') serializer_class = ServerInfoSerializers # 渲染页面 renderer_classes = (renderers.TemplateHTMLRenderer, renderers.JSONRenderer) # renderer_classes = [renderers.JSONRenderer] template_name = 'server_list.html' # 精确过滤,不支持模糊查询,元素为models中定义的需要过滤的字段 # filter_backends = [DjangoFilterBackend] filterset_fields = ['server_ip', 'app', 'app_port', 'project_name', 'status']
4、测试
精确查询结果
模糊查询----不支持模糊
好像哪里不对,本文不是要实现模糊搜索吗????
奥。。。忘了。。。。既然实现了精确查询,那模糊查询很简单,略微改造下就行。
1、步骤同上,已做,略过
2、步骤同上,已做,略过
3、编写过滤器类
from django_filters.rest_framework import FilterSet import django_filters from env.models import ServerInfo class ServerInfoFilter(FilterSet): """ ip过滤器,模糊查询 """ server_ip = django_filters.CharFilter(field_name='server_ip', lookup_expr='icontains') # icontains,包含且忽略大小写 class Meta: # 指定模型 models = ServerInfo # 指定需要模糊查询的字段 fields = ['server_ip']
4、视图类中增加属性 filterset_class
class ServerInfoList(generics.ListAPIView): """ 获取所有服务器信息 """ from django.db.models import Q # 使用orm的或查询Q相当于SQL的or关键字,查询集为状态为启用和禁用的 queryset = ServerInfo.objects.filter(Q(status=1) | Q(status=2)).order_by('-update_time') serializer_class = ServerInfoSerializers # 渲染页面 # renderer_classes = (renderers.TemplateHTMLRenderer, renderers.JSONRenderer) renderer_classes = [renderers.JSONRenderer] template_name = 'server_list.html' # 精确过滤,不支持模糊查询,需要过滤的字段 # filter_backends = [DjangoFilterBackend] # filterset_fields = ['server_ip', 'app', 'app_port', 'project_name', 'status'] # 模糊匹配查询 filterset_class = server_info_filter.ServerInfoFilter
5、测试
支持模糊匹配,搞定
相关文章
- 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
- Django根据现有数据库建立/更新model
- Django 1.6 最佳实践: django项目的服务器自动化部署(转)
- Django中如何使用django-celery完成异步任务1(转)
- python-django框架-电商项目-项目部署_20191127
- django_websocket实现简单聊天室
- django的RestFramework模块的源码分析
- Django自身的CBV列表
- Nginx+uwsgi+Django环境部署
- django中实现组合搜索
- [Django] Start a new django project
- Django 模型
- Django 3.2.5博客开发教程:体验django模板
- Python Django 模板继承(header,body,footer抽取)
- Python Django Session中存取值常用API
- Python Django 通过admin后台创建表数据
- 15 - vulhub - Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
- Django===django工作流
- Django(13)-静态文件
- Django ORM 数据库常用操作