Django 1.10版本已經(jīng)發(fā)布,該版本所給出的新特性包括:對(duì)PostgreSQL數(shù)據(jù)庫(kù)的全文檢索、Unicode用戶名的官方支持和新型的中間件。
作為Django軟件基金會(huì)的動(dòng)態(tài)語(yǔ)言,該Django的重大發(fā)布包括了在django.contrib.postgres.search模塊中對(duì)數(shù)據(jù)庫(kù)函數(shù)調(diào)用的功能,這方便了使用PostgreSQL的全文檢索引擎。
Django團(tuán)隊(duì)給出了例子代碼,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中某一行數(shù)據(jù)進(jìn)行簡(jiǎn)單搜索。代碼如下所示:
>>> Entry.objects.filter(body_text__search='Cheese')[“代碼從數(shù)據(jù)庫(kù)的 body_text 域調(diào)用一次 to_tsvector函數(shù),并為檢索詞‘Cheese’調(diào)用一次plainto_tsquery函數(shù)。這兩次函數(shù)調(diào)用均使用缺省的數(shù)據(jù)庫(kù)檢索配置。檢索結(jié)果通過(guò)對(duì)查詢與向量的匹配而得到。為使用該檢索查找功能,環(huán)境設(shè)置INSTALLED_APPS中必須包括'django.contrib.postgres'。”
Django 1.10版本的新特性還包括引入了一種新型的中間件,該中間件所解決的問(wèn)題是,“在DEP 0005改進(jìn)建議中提出的舊式中間件中缺乏嚴(yán)格意義上的請(qǐng)求和響應(yīng)層的問(wèn)題”。
作為一種“鉤入Django請(qǐng)求及響應(yīng)處理的架構(gòu)”,Django的新型中間件提供了django.utils.deprecation.MiddlewareMixin模塊,用于創(chuàng)建與 MIDDLEWARE和MIDDLEWARE_CLASSES兼容的中間件類(lèi)。
按Django文檔所述,“該混合類(lèi)型模塊提供了__init__方法,接受get_response作為可選參數(shù),并將該參數(shù)保存在self.get_response中”。對(duì)此方法詳解如下:
__call__方法:
調(diào)用self.process_request(request) (如果已定義了); 調(diào)用self.get_response(request),從后續(xù)的中間件和視圖中獲取響應(yīng); 調(diào)用self.process_response(request, response) (如果已定義了); 返回響應(yīng)。在網(wǎng)絡(luò)上關(guān)于Django最新發(fā)布的新聞得到了很多的肯定,但也一些評(píng)論提出了對(duì)Channels項(xiàng)目的需求。
在HackerNew網(wǎng)站對(duì)“Django 1.10發(fā)布了”的討論中,用戶Tom Forbes是這樣評(píng)論的:“Channels項(xiàng)目真是可恥呀,我發(fā)現(xiàn)新版本中并沒(méi)有包含這個(gè)項(xiàng)目”。而用戶ubernostrum是這樣回復(fù)的:“Channel項(xiàng)目將會(huì)取得成功的。它只是尚未準(zhǔn)備好在1.10版本中發(fā)布。希望它會(huì)在1.11版本中準(zhǔn)備好,并將在Django中啟用。”
用戶passiveincomelg給出了不太確定的說(shuō)法:“我對(duì)Channel的態(tài)度有些矛盾。一方面,使用它所能做的事情是很酷的,它的設(shè)計(jì)十分聰明地避免了重寫(xiě)所有Django程序?yàn)楫惒降摹A硪环矫?,為?shí)現(xiàn)這個(gè)Go和Erlang所輕易實(shí)現(xiàn)的功能,還有要去完成多少的惡作劇,這真是令人抓狂。”
Django 1.10版還包括一些不向后兼容的改進(jìn)。而也有一些特性在達(dá)到其棄用周期后,也已經(jīng)被棄用。
這些被棄用的特性包括:在LOGIN_URL和LOGIN_REDIRECT_URL中設(shè)置使用可帶點(diǎn)的Python路徑;django.core.context_processors、django.db.models.sql.aggregates和django.contrib.gis.db.models.sql.aggregates等模塊;為使用SQLCompiler的quote_name_unless_alias方法而支持用別名方式直接調(diào)用SQLCompiler;以及其它一些私有API。
作為一種用Python編寫(xiě)的自由開(kāi)源Web應(yīng)用框架,Django以三句版BSD協(xié)議發(fā)布,它歡迎來(lái)自InfoQ社區(qū)的貢獻(xiàn)。
任何尋求改進(jìn)和對(duì)Django有所貢獻(xiàn)的人,可以訪問(wèn)docs.djangoproject.com/en/dev/internals/contributing/.
查看英文原文:Django 1.10 Brings Full Text Search for PostgreSQL