Django REST framework实现关键词检索

来源:互联网 发布:只有我知大结局 编辑:程序博客网 时间:2024/06/06 01:52

Django REST framework实现关键词检索

注:下文需要使用Django REST framework中的 API,包括viewsets、serializer等,对这些API本文不作讨论,如果想了解API的具体使用,请见Django REST官网。
如果你对Django 和Django REST不熟悉,不建议阅读本文~

本文意图实现一个简单的关键词检索的功能,其核心非常简单,就是SQL语句中的SELECT * FROM table where keyword like '%{param}%'
但是在Django中,我们除了使用SQL语句外,也可以使用Django提供的数据过滤方法fliter()实现相同的功能:

Place.objects.filter(keyword__contains={param})

其中,{param}是我们要填入的参数,也就是要查询的关键字。

流程图

Created with Raphaël 2.1.0开始url传入关键字参数服务器获取该参数服务器执行查询语句返回查询结果结束

我们要实现的工作就是接收用户输入的参数,然后把参数传递到服务器端,然后执行上面这条语句,最后将执行结果返回到浏览器端。为了简化这一步骤,用户输入的参数,直接写到URL中,通过URL传给服务器。因此,我们需要修改urls.py 和 views.py 两部分

  • 修改urls.py
  • 修改views.py


1、修改urls.py

from rest_framework.routers import DefaultRouterfrom . import viewsrouter = DefaultRouter()"""注意url的设计,(?P<keyword>.+)是一段正则表达式,在url中必须有'keyword'。. 表示匹配除换行符\n 之外的任何单字符+ 匹配前面的子表达式一次或多次"""router.register(r'keyword/(?P<keyword>.+)/$', views.KeywordSearchViewSet) urlpatterns = router.urls


2、修改views.py

from . import models, serializersfrom rest_framework import viewsets, permissionsfrom rest_framework.response import Responseclass KeywordSearchViewSet(viewsets.ModelViewSet):    queryset = models.MyModel.objects.all()    serializer_class = serializers.MyModelSerializer    permission_classes = [permissions.AllowAny]    # 核心部分就是list方法    def list(self, request):        keyword = request.GET.get('keyword') # 获取参数        if keyword is not None: # 如果参数不为空             # 执行filter()方法            queryset = models.MyModel.objects.filter(keyword__contains=keyword)        else:             # 如果参数为空,执行all()方法            queryset = models.MyModel.objects.all()        serializer = serializers.MyModelSerializer(queryset, many=True)        return Response(serializer.data) # 最后返回经过序列化的数据


3、测试

在浏览器地址栏里,输入url,比如我这里是:"www.example.com/?keyword=银行"(在实际生产中,我的keyword其实是name,原理都是一样的)

我们将‘银行’作为关键词写入到url中,服务器通过GET方法获取到这个关键词,然后执行查询,最后返回一个经过序列化的结果(Django REST 里是json字符串)

这里写图片描述

json结果如下,如果仔细观察会发现name是“交通银行”,包含“银行”这两个字。证明刚刚写的程序是可以实现一个简单的关键词查询的。

这里写图片描述

问:遇到一个经常更改需求的项目经理,你会怎么办??!!

这里写图片描述

原创粉丝点击