写点什么

Django 1.10 提供了 PostgreSQL 中的全文检索功能

  • 2016-08-11
  • 本文字数:1524 字

    阅读完需:约 5 分钟

Django 1.10 版本已经发布,该版本所给出的新特性包括:对 PostgreSQL 数据库的全文检索、Unicode 用户名的官方支持和新型的中间件。

作为 Django 软件基金会的动态语言,该 Django 的重大发布包括了在 django.contrib.postgres.search 模块中对数据库函数调用的功能,这方便了使用 PostgreSQL 的全文检索引擎。

Django 团队给出了例子代码,实现对数据库中某一行数据进行简单搜索。代码如下所示:

复制代码
>>> Entry.objects.filter(body_text__search='Cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza Recipes>]

“代码从数据库的 body_text 域调用一次 _to_tsvector_ 函数,并为检索词‘Cheese’调用一次 _plainto_tsquery_ 函数。这两次函数调用均使用缺省的数据库检索配置。检索结果通过对查询与向量的匹配而得到。为使用该检索查找功能,环境设置 INSTALLED_APPS 中必须包括’django.contrib.postgres’。”

在 Django 文档中,可以查阅到使用 SearchVector SearchQuery SearchRank 类的例子,详细内容参见这里

Django 1.10 版本的新特性还包括引入了一种新型的中间件,该中间件所解决的问题是,“在 DEP 0005 改进建议中提出的旧式中间件中缺乏严格意义上的请求和响应层的问题”。

作为一种“钩入 Django 请求及响应处理的架构”,Django 的新型中间件提供了 django.utils.deprecation.MiddlewareMixin 模块,用于创建与 MIDDLEWARE 和 MIDDLEWARE_CLASSES 兼容的中间件类。

按 Django 文档所述,“该混合类型模块提供了 ___init__()_ 方法,接受 _get_response_ 作为可选参数,并将该参数保存在 _self.get_response_ 中”。对此方法详解如下:

__call__() 方法:

  1. 调用 self.process_request(request) (如果已定义了);
  2. 调用 self.get_response(request),从后续的中间件和视图中获取响应;
  3. 调用 self.process_response(request, response) (如果已定义了);
  4. 返回响应。

在网络上关于 Django 最新发布的新闻得到了很多的肯定,但也一些评论提出了对 Channels 项目的需求。

在 HackerNew 网站对“Django 1.10 发布了”的讨论中,用户 Tom Forbes 是这样评论的:“Channels 项目真是可耻呀,我发现新版本中并没有包含这个项目”。而用户 ubernostrum 是这样回复的:“Channel 项目将会取得成功的。它只是尚未准备好在1.10 版本中发布。希望它会在1.11 版本中准备好,并将在Django 中启用。”

用户 passiveincomelg 给出了不太确定的说法:“我对Channel 的态度有些矛盾。一方面,使用它所能做的事情是很酷的,它的设计十分聪明地避免了重写所有Django 程序为异步的。另一方面,为实现这个Go 和Erlang 所轻易实现的功能,还有要去完成多少的恶作剧,这真是令人抓狂。”

Django 1.10 版还包括一些不向后兼容的改进。而也有一些特性在达到其弃用周期后,也已经被弃用

这些被弃用的特性包括:在LOGIN_URL 和LOGIN_REDIRECT_URL 中设置使用可带点的Python 路径;django.core.context_processors、django.db.models.sql.aggregates 和django.contrib.gis.db.models.sql.aggregates 等模块;为使用SQLCompiler 的quote_name_unless_alias 方法而支持用别名方式直接调用SQLCompiler;以及其它一些私有API。

作为一种用Python 编写的自由开源Web 应用框架,Django 以三句版BSD 协议发布,它欢迎来自InfoQ 社区的贡献。

任何寻求改进和对Django 有所贡献的人,可以访问 docs.djangoproject.com/en/dev/internals/contributing/ .

查看英文原文: Django 1.10 Brings Full Text Search for PostgreSQL


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-08-11 19:002269
用户头像

发布了 227 篇内容, 共 79.0 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

技术分享 | 一文搞定 Appium 环境配置

霍格沃兹测试开发学社

深度理解Redux原理并实现一个redux

夏天的味道123

React

AI 应用的全流程存储加速方案技术解析和实践分享

Baidu AICLOUD

海量存储 高性能计算 高性能存储 AI加速

python实现ftp服务端和客户端

技能实验室

Python 10月月更

python版局域网端口扫描

技能实验室

Python 10月月更

python中的一个实用的库imghdr,用于探测图片格式

技能实验室

Python 10月月更

使用python处理视频的库moviepy

技能实验室

python 3.5+ 10月月更

React高级特性之Context

夏天的味道123

React

testcontainers-java 新增对 TiDB 的支持

PingCAP

TiDB

python替换图片背景色,适用于制作证件照

技能实验室

python 3.5+ 10月月更

windows机器配置自签名ssl证书,部署文件服务器

技能实验室

windows SSL证书 10月月更

个推TechDay治数训练营第三期直播预告:分享数据指标体系搭建秘诀!

个推

数据中台 数据分析 指标体系 数据指标 指标中台; 数据分析

React的5种高级模式

夏天的味道123

React

一文读懂 DNS 解析的工作机制和优化挑战

融云 RongCloud

DNS

React-Hook最佳实践

xiaofeng

React

技术分享 | 使用 Zabbix + Grafana 搭建服务器监控系统

霍格沃兹测试开发学社

使用python时刻中监控文件夹,记录文件夹中文件异常信息

技能实验室

Python 10月月更

使用python校验密码强度

技能实验室

python 3.5+ 10月月更

使用python给图片加个盲水印

技能实验室

Python 10月月更

在Centos6.10安装python3后安装第三方包遇到的问题

技能实验室

Python 10月月更

python入门之发送邮件

技能实验室

Python 10月月更

React-diff原理及应用

xiaofeng

React

使用python提供一个简单的restful接口

技能实验室

python 3.5+ 10月月更

python入门之数据库操作

技能实验室

Python 10月月更

python入门之时间处理日期库

技能实验室

Python 10月月更

SPL 工业智能:识别指定工况

石臻臻的杂货铺

SPL 10月月更

高级特性之Render Props

夏天的味道123

React

STM32 非接触测温传感器 项目记录(ModbusRTU协议)

矜辰所致

stm32 ModbusRTU 10月月更 非接触测温

使用python计算两个位置的距离是多远

技能实验室

Python 10月月更

翻译API的python调用方式

技能实验室

Python 10月月更

python入门之os模块和platform模块

技能实验室

10月月更

Django 1.10提供了PostgreSQL中的全文检索功能_Python_James Chesters_InfoQ精选文章