写点什么

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:002176
用户头像

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

关注

评论

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

Spring Cloud 微服务实践(2) - Gateway重试机制

xiaoboey

maven Spring Cloud Gateway modules 重试

UML练习1-食堂就餐卡系统设计

博古通今小虾米

UML

在线游戏,如何把握住1个亿以上的DAU?

博睿数据

运维 监控 AIOPS 系统 用户体验

Spring Cloud 微服务实践(0) - 开篇闲话

xiaoboey

微服务 Spring Cloud Spring Boot Spring Framework

Spring Cloud 微服务实践(1) - 用Initializr初始化

xiaoboey

Spring Cloud Eureka Gateway Hoxton

裳雨

GongTeng95

写作 写作平台

USDT支付系统开发技术方案,数字货币承兑商支付

13530558032

LeetCode题解:622. 设计循环队列,使用数组,JavaScript,详细注释

Lee Chen

大前端 LeetCode

如何进步神速

Sean

学习 个人成长

Python基础知识(二)

Python基础

大数据下单集群如何做到2万+规模?

华为云开发者联盟

大数据 集群

2020年7月云主机性能评测报告

博睿数据

云计算 测试 公有云 评测 排行榜

Electronjs

Neil

Java 大前端 Electron 客户端开发

数字货币量化交易,量化对冲搬砖系统开发

13530558032

高速路二维码报警定位系统开发,二维码报警定位功能

13530558032

不想搞Java了,4年经验去面试10分钟结束,现在Java面试为何这么难

Java架构师迁哥

算法大赛评委亲授通关秘籍,报名倒计时!

易观大数据

python——自定义序列类

菜鸟小sailor 🐕

CentOS 7 安装 Python 3.7

wong

Python

直播倒计时|30分钟带你解锁“技术写作”新技能

有只小耳朵

技术 写作 直播 技术创作 RTC征文大赛

危与机并存 保险业如何走好线上线下业务并举转型之路?

博睿数据

运维 监控 保险 AIOPS 系统

Java 基础语法

InfoQ_34a83d636158

活着

GongTeng95

一次压缩引发堆外内存过高的教训

AI乔治

Java kafka JVM

数字货币交易所源码开发,区块链交易系统搭建服务商

13530558032

实践案例丨云连接CC实现跨区域多VPC与线下IDC Server互联

华为云开发者联盟

云服务 IDC

血的教训!千万别在生产使用这些 redis 指令

redis 学习 编程 程序员

架构师训练营结业作业

superman

架构师训练营大作业

叮叮董董

一次旅途

GongTeng95

2020年8月北京BGP机房网络质量评测报告

博睿数据

测试 机房 评测 排行榜 IDC

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