Django全文搜索

这篇具有很好参考价值的文章主要介绍了Django全文搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Django ORM允许你执行简单的匹配操作,例如contains过滤器(或者不区分大小写的icontains)。
比如查询正文中包含django的文章

from blog.models import Post
Post.objects.filter(body__contains='framework')

但是如果希望执行复杂的搜索查询,通过相似度或加权项检索结果,则需要更强大的搜索功能。

📌虽然Django是一个与数据库无关的web框架,但它提供了一个模块,该模块支持PostgreSQL提供的部分丰富特性,不支持非PostgreSQL数据库。

Django.contrib.postgres模块提供了由PostgreSQL专享的功能。

简单查询

INSTALLED_APPS = [
	#...
    "django.contrib.postgres",

]

对单个字段进行搜索

from blog.models import Post
Post.objects.filter(body__search='django')

对多个字段进行查询

搜索Post模型的标题和正文字段

from django.contrib.postgres.search import SearchVector
from blog.models import Post

Post.objects.annotate(
		search=SearchVector('title', 'body'),
	).filter(search='django')


使用annotate并使用两个字段定义SearchVector(文章标题和正文)。

构建查询视图

创建一个自定义视图,首先需要一个搜索表单
编辑form.py,新建SearchForm表单类

from django import forms
from .models import Comment

class EmailPostForm(forms.Form):
	name = forms.CharField(max_length=25)
	email = forms.EmailField()
	to = forms.EmailField()
	comments = forms.CharField(required=False,widget=forms.Textarea)

class CommentForm(forms.ModelForm):
	class Meta:
		model = Comment
		fields = ('name','email','body')

class SearchForm(forms.Form):
	query = forms.CharField()

使用query字段让用户引入搜索词。

关于EmailPostForm和CommentForm表单的更多内容,请查看

Django发送QQ邮件-CSDN博客

Django评论系统-CSDN博客

📌注意forms.CharField后面的括号,如果没有括号不会报错

编辑views.py

from .forms import EmailPostForm,CommentForm,SearchForm
from django.contrib.postgres.search import SearchVector

def post_search(request):
    form = SearchForm()
    query = None
    results = []
    if 'query' in request.GET:
        form = SearchForm(request.Get)
        if form.is_valid():
            query = form.cleaned_data['query']
            results = Post.objects.annotate(
                search = SearchVector('title','body'),
            ).filter(search=query)
    template = "blog/post/search.html"
    context={
        'form':form,
        'query':query,
        'results':results,
    }

    return render(request,template,context)
  • 首先实例化一个表单。
  • 使用GET方法提交表单,以便生成包含查询参数URL
  • 在请求中查找query参数,检验是否提交了表单
  • 提交表单时,使用提交的GET数据实例化,并验证表单数据是否有效
  • 如果表单有效,使用自定义SearchVector实例搜索包含标题和正文字段

构建查询模版

搜索视图准备好后,创一个模版,在用户执行搜索时显示表单和结果。

在blog/post/template目录下创建search.html

```html
{% extends "blog/base.html" %}
{% block title %}Search{% endblock %}
{% block content %}
    {% if query %}
        <h1>Posts containing "{{ query }}"</h1>
        <h3>
            {% with result.cont as total_results %}
                Found {{ total_results }} result {{ total_results|pluralize }}
            {% endwith %}

        </h3>

        {% for post in results %}

            <h4>
                <a href="{{ post.get_absolute_url }}">{{post.title}}</a>
            </h4>
            {{ post.body|truncatewords:5 }}

        {% empty %}

            <p>There are no results for your query.</p>

        {% endfor%}

        <p>
            <a href="{% url 'blog:post_search' %}">Search again</a>
        </p>

    {% else %}

        <h1>Search for posts</h1>
        <form action="." method="get">{{ form.as_p }}
            <input type="submit" value="Search">
        </form>

    {% endif %}

{% endblock%}
  • 与搜索视图一样,通过查询query参数区分表单是否已提交
  • 提交前,显示表单和提交按钮
  • 提交后,显示查询查询结果总数和文章列表

post.get_absolute_url 是使用年月日为每个文章构建的URL,更多信息请查看

Django用日期URL定位详情-CSDN博客

构建查询路径

编辑urls.py文章来源地址https://www.toymoban.com/news/detail-786290.html

urlpatterns = [

	#...
    path('search/',views.post_search, name='post_search')

]

到了这里,关于Django全文搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 七、Django DRF框架GenericAPIView--搜索&排序&分页&返回值

    上一章: 六、DRF框架APIView--requestresponse解析器渲染器_做测试的喵酱的博客-CSDN博客 下一章: APIView 继承 View GenericAPIView 继承 APIView。 GenericAPIView 功能:     a.具备View的所有特性     b.具备了APIView中的认证、授权、限流功能     c.还支持对于获取列表数据接口的功能:搜索

    2024年02月08日
    浏览(15)
  • 43--Django-项目实战-全栈开发-基于django+drf+vue+elementUI企业级项目开发流程-课程详情页面、搜索页面以及后台设计

    1.视频播放功能 下载第三方插件:vue-video-player 使用步骤: 第一步: cnpm install vue-video-player 第二步:在main.js中引入

    2024年02月09日
    浏览(12)
  • Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十三之条件表达式搜索、更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回。 这个操作类似于数据库中 if elif else 的逻辑。 以下是本篇笔记的目录: model 和数据准备 When 和

    2023年04月13日
    浏览(12)
  • 【python】Django——django简介、django安装、创建项目、快速上手

    【python】Django——django简介、django安装、创建项目、快速上手

    笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django 是一个高效、功能强大的 Web 应用程序框架,采用 Python 编写

    2024年02月20日
    浏览(15)
  • python的安装,Django的安装,Pycharm新建Django项目

    python的安装,Django的安装,Pycharm新建Django项目

    官网:https://www.python.org 官网–downloads–windows–选择对应的版本下载.exe文件 双击运行下载的安装包,按步骤进行安装 ①选择安装方式 install now,会直接默认安装到C盘中; customize installation,自定义安装,可以自行选择安装的位置 PS:无论选择哪种方式,都要记得勾选最底下

    2024年02月21日
    浏览(9)
  • Django笔记四十之运行Django环境的python脚本

    Django笔记四十之运行Django环境的python脚本

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十之运行Django环境的python脚本 这一篇笔记介绍如何在 Django 中运行脚本。 假设说我们要实现一个功能,需要获取 blog.models.Blog 这张表里的总数且使用 print() 输出。 如果代码逻辑很短,且是一次性执行的操作,我们可以在系

    2024年02月04日
    浏览(10)
  • windows解决python安装django架构没有django-admin命令

    windows解决python安装django架构没有django-admin命令

    目录 一.尝试安装与配置 1.直接pip命令安装 2.用pycharm测试 3.官网下包安装 二.解决 1.找到django安装的路径 2.配置系统变量 3.测试创建项目 3.1.执行访问页面 3.2.解决 3.3.继续测试 4.pycharm打开     新建项目测试    注:发现没有django这个框架选项,后面发现这个功能只有专业版才

    2024年02月06日
    浏览(8)
  • 一周学会Django5 Python Web开发-Django5路由定义

    一周学会Django5 Python Web开发-Django5路由定义

    锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计22条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、

    2024年02月19日
    浏览(42)
  • Python Django 详解(基础)

    Python Django 详解(基础)

    [File] - [New Project...] - [Django] - 设置 Location 和 解释器 - [create] 固定,不用动的文件:     asgi.py:接收网络请求(异步)     wsgi.py:接收网络请求(同步) 重要,需要经常操作的文件:     urls.py:URL和函数的对应关系     settings.py:项目配置 命令窗口执行命令: python

    2024年02月07日
    浏览(10)
  • Python--Django--说明

    Python--Django--说明

    Django 是基于python 的 Web 开发框架. nsbp;   Web开发指的是开发基于B/S 架构, 通过前后端的配合, 将后台服务器上的数据在浏览器上展现给前台用户的应用. nsbp;   在早期, 没有Web框架的时候, 使用 Python CGI 脚本显示数据库中的数据.     Web框架致力于解决一些共同的问题, 为

    2024年04月16日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包