[关闭]
@Rays 2016-08-10T05:49:26.000000Z 字数 2035 阅读 1330

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

摘要:近日Django 1.10版本发布,该版本最重大的改进是实现了对数据库函数的直接调用,这使得Django可使用PostgreSQL的全文检索功能。此外,该新版本相关的热议话题包括:新型中间件的引入,以及尚未实现的Channels项目等。


作者:James Chesters

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

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

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

  1. >>> Entry.objects.filter(body_text__search='Cheese')
  2. [<Entry: Cheese on Toast recipes>, <Entry: Pizza Recipes>]

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

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

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注