摘要:是開(kāi)發(fā)最常用的框架之一,跟進(jìn)它的最新變化絕對(duì)是必須的。年月日,官方發(fā)布了版本,成為多年來(lái)的第一次大版本提升,那么對(duì)廣大使用者有哪些變化和需要注意的地方呢一兼容性支持和。
Django 是 Python Web 開(kāi)發(fā)最常用的框架之一,跟進(jìn)它的最新變化絕對(duì)是必須的。
2017年12月2日,Django官方發(fā)布了2.0版本,成為多年來(lái)的第一次大版本提升,那么2.0對(duì)廣大Django使用者有哪些變化和需要注意的地方呢?
一、Python兼容性Django 2.0支持Python3.4、3.5和3.6。Django官方強(qiáng)烈推薦每個(gè)系列的最新版本。
最重要的是Django 2.0不再支持Python2!
Django 1.11.x是支持Python2.7的最后版本。
二、2.0新特性 1.簡(jiǎn)化了URL路由語(yǔ)法django.urls.path()方法的語(yǔ)法更簡(jiǎn)單了。
例如以前的:
url(r"^articles/(?P
可以寫作:
path("articles/
新語(yǔ)法支持強(qiáng)制定義參數(shù)類型。例子中只接收整數(shù)型年份參數(shù),不再接收字符串類型,同時(shí)"10000"年也是合法的(雖然是5位數(shù)字),而不像先前正則里只能接收4位數(shù)字。
以前版本的?django.conf.urls.url()方法變成了?django.urls.re_path(),但為了向后兼容,舊的依然保留,而不是立刻廢棄。?django.conf.urls.include()方法現(xiàn)在可以從?django.urls導(dǎo)入,也就是你可以使用?from?django.urls?import?include,?path,?re_path。
2.admin后臺(tái)對(duì)移動(dòng)端更加友好Django最受大家歡迎的admin后臺(tái),具有響應(yīng)式特性,支持主流的移動(dòng)設(shè)備。
3.Window 表達(dá)式新的Window表達(dá)式允許為查詢集添加一個(gè)OVER從句。
4.小特性 django.contrib.admin后臺(tái)新的?ModelAdmin.autocomplete_fields屬性和?ModelAdmin.get_autocomplete_fields()方法現(xiàn)在可以在外鍵和多對(duì)多字段上使用Select2搜索框。
django.contrib.auth用戶認(rèn)證PBKDF2密碼哈希默認(rèn)的迭代次數(shù)從36000增加到100000。
django.contrib.gis地理框架為AsGeoJSON、GeoHash和GeoHash方法,isvalid和distance查詢?cè)黾覯ySQL支持;
添加Azimuth和LineLocatePoint方法,支持PostGIS和SpatiaLite;
所有從GeoJSON導(dǎo)入的GEOSGeometry擁有SRID集合;
添加?OSMWidget.default_zoom屬性,用于自定義地圖的默認(rèn)縮放級(jí)別;
metadata現(xiàn)在是可讀可編輯的;
允許在GDAL的內(nèi)部虛擬文件系統(tǒng)中創(chuàng)建GDALRaster對(duì)象;
新的?GDALBand.color_interp()方法返回波段的顏色說(shuō)明。
django.contrib.postgres數(shù)據(jù)庫(kù)ArrayAgg新增distinct參數(shù);
新的RandomUUID函數(shù);
django.contrib.postgres.indexes.GinIndex現(xiàn)在支持?fastupdate和?gin_pending_list_limit參數(shù);
新的GistIndex類允許在數(shù)據(jù)庫(kù)中創(chuàng)建GiST索引;
inspectdb現(xiàn)在可以內(nèi)省JSONField和RangeFields。
django.contrib.sitemaps站點(diǎn)地圖為GenericSitemap構(gòu)造器增加protocol參數(shù);
Cache緩存cache.set_many()現(xiàn)在返回一個(gè)列表,包含了插入失敗的鍵值;
File Storage文件存儲(chǔ)File.open()現(xiàn)在可以用于上下文管理器,例如?with file.open() as f:;
Forms表單SplitDateTimeWidget和?SplitHiddenDateTimeWidget增加?date_attrs與?time_attrs參數(shù),用于為?DateInput與?TimeInput指定HTML屬性;
新的?Form.errors.get_json_data()方法返回字典類型的表單錯(cuò)誤,以適應(yīng)JSON類型x響應(yīng);
Generic Views通用視圖新的?ContextMixin.extra_context屬性允許在?View.as_view()中添加上下文;
Management Commands管理命令inspectdb現(xiàn)在將MySQL的無(wú)符號(hào)整數(shù)視作?PositiveIntegerField或者?PositiveSmallIntegerField;
新增?makemessages --add-location選項(xiàng);
loaddata現(xiàn)在可以從標(biāo)準(zhǔn)輸入讀入;
新增?diffsettings --output選項(xiàng);
Migrations遷移新增?squashmigrations --squashed-name選項(xiàng);
Models模型新增StrIndex數(shù)據(jù)庫(kù)函數(shù);
對(duì)于Oracle數(shù)據(jù)庫(kù),AutoField和BigAutoField現(xiàn)在會(huì)生成identity列;
QuerySet.iterator()新增?chunk_size參數(shù);
QuerySet.earliest()、?QuerySet.latest()和?Meta.get_latest_by現(xiàn)在可以根據(jù)一些字段進(jìn)行排序;
增加ExtractQuarter方法,用于DateField和DateTimeField;
新增TruncQuarter方法用于截取DateField和DateTimeField到季度的第一天;
為基于類的索引添加?db_tablespace參數(shù);
為?QuerySet.select_for_update()增加of參數(shù),但只支持PostgreSQL和Oracle數(shù)據(jù)庫(kù);
QuerySet.in_bulk()新增?field_name參數(shù);
CursorWrapper.callproc()現(xiàn)在接收可選的字典類型關(guān)鍵字參數(shù);
QuerySet.values_list()新增named參數(shù),用于獲取命名的元組結(jié)果;
新的FilteredRelation類允許為查詢集增加一個(gè)ON從句;
增加?Paginator.get_page(),可以處理各種非法頁(yè)面參數(shù),防止異常;
Requests and Responses請(qǐng)求和相應(yīng)現(xiàn)在,runserver服務(wù)器支持HTTP 1.1;
Templates模版為了提高?Engine.get_default()在第三方模塊的用途,現(xiàn)在它將返回配置在TEMPLATES中的多個(gè)DjangoTemplates引擎中的第一個(gè),而不是彈出ImproperlyConfigured錯(cuò)誤;
自定義模版標(biāo)簽現(xiàn)在接收強(qiáng)制關(guān)鍵字參數(shù);
Tests測(cè)試為L(zhǎng)iveServerTestCase添加多線程支持;
Validators驗(yàn)證器新的ProhibitNullCharactersValidator不允許CharField及其子類的表單輸入為空;
三、重要的向后不兼容 1. 某些地方刪除對(duì)bytestrings的支持例如,對(duì)于reverse(),現(xiàn)在使用str()代替force_text()。
2. AbstractUser.last_name的最大長(zhǎng)度增加到150如果你有一個(gè)自定義的用戶模型繼承了AbstractUser,你需要生成并應(yīng)用一個(gè)數(shù)據(jù)庫(kù)遷移,使得?last_name的最大長(zhǎng)度變?yōu)?50。
如果你需要為?last_name保持30個(gè)字符的限制,可以如下使用自定義表單:
from?django.contrib.auth.forms?import?UserChangeForm
class?MyUserChangeForm(UserChangeForm):
? ?last_name?=?forms.CharField(max_length=30,?required=False)
如果你需要在admin中也保持這個(gè)約束,那么可以如下使用UserAdmin.form:
from?django.contrib.auth.admin?import?UserAdmin
from?django.contrib.auth.models?import?User
class?MyUserAdmin(UserAdmin):
? ?form?=?MyUserChangeForm
admin.site.unregister(User)
admin.site.register(User,?MyUserAdmin)
3. QuerySet.reverse()和last()不能用于切片后的查詢集對(duì)切片后的查詢集使用反轉(zhuǎn)和獲取最近對(duì)象的操作將彈出異常,如下所示:
>>>?Model.objects.all()[:2].reverse()
Traceback?(most recent call?last):
...
TypeError:?Cannot?reverse a query once a slice has been taken.
4. 表單的字段不再接收可選參數(shù)作為位置參數(shù)為了防止運(yùn)行時(shí)錯(cuò)誤,提高可靠性。以前類似下面的參數(shù)傳遞方法,現(xiàn)在是錯(cuò)誤的了:
forms.IntegerField(25,?10)
要這么傳遞:
forms.IntegerField(max_value=25,?min_value=10)
例如下面的用法將導(dǎo)致異常:
models.Index(["headline",?"-pub_date"],?"index_name")
要提供參數(shù)關(guān)鍵字,改寫為:
models.Index(fields=["headline",?"-pub_date"],?name="index_name")
對(duì)于使用選項(xiàng)而不是使用?parser.add_argument()進(jìn)行自定義的管理命令,需要添加一個(gè)?stealth_options屬性,如下所示:
class?MyCommand(BaseCommand):
? ?stealth_options?=?("option_name",?...)
7. SQLite現(xiàn)在支持外鍵約束另外,Django2.0還廢棄和移除了一些方法和屬性。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41597.html
摘要:年月宣布支持時(shí)間延長(zhǎng)到年。更詳細(xì)的發(fā)布列表參閱官網(wǎng)的版本號(hào)分為三段,形如。其中表示大版本號(hào),一般當(dāng)整體重寫,或出現(xiàn)不向后兼容的改變時(shí),增加表示功能更新,出現(xiàn)新功能時(shí)增加表示小的改動(dòng)如修復(fù)了某個(gè),只要有修改就增加。年公司正式發(fā)布。 < 返回索引頁(yè) Python語(yǔ)言簡(jiǎn)介 Python介紹及發(fā)展 介紹 Python 官方網(wǎng)站:https://www.python.org/, 大家可以到此處下...
摘要:于年月發(fā)布,這是繼之后第一個(gè)重要的版本。核心改為的另一種形式棄用改為改為擴(kuò)展所有擴(kuò)展將會(huì)被棄用。這些擴(kuò)展會(huì)從中抽離出來(lái),允許他們有單獨(dú)的發(fā)布時(shí)間表,使得適合于他們的。 WTForms 是一個(gè) Python 表單驗(yàn)證、渲染開(kāi)發(fā)包。WTForms 2.0 于2014年5月發(fā)布,這是繼 WTForms 1.0.5 之后第一個(gè)重要的版本。 新特性 Class Meta 可以從多方面定制...
摘要:鏈接中文翻譯常用庫(kù)推薦除了上面提到的之外,也是一個(gè)很好的選項(xiàng)。官網(wǎng)中文翻譯如果你要編寫簡(jiǎn)單的爬蟲(chóng),來(lái)爬去互聯(lián)網(wǎng)上的信息,或者調(diào)用一些外部的機(jī)遇的接口,使用這個(gè)庫(kù)再也合適不過(guò)了。 作者:安龍 LeanCloud 工程師 引言 :前段時(shí)間有同學(xué)反映 Python 的學(xué)習(xí)資源匯總很少。那么學(xué)習(xí)資料哪個(gè)質(zhì)量更好,效率更高?Python 有哪些非常值得學(xué)習(xí)的庫(kù)?2017 年了學(xué) 2 還是學(xué) 3 ...
摘要:按照指示,分別安裝和,然后測(cè)試安裝結(jié)果接下來(lái),根據(jù)以下項(xiàng)目結(jié)構(gòu)從克隆一份項(xiàng)目或自己創(chuàng)建項(xiàng)目現(xiàn)在我們準(zhǔn)備容器運(yùn)行開(kāi)啟,只需運(yùn)行這個(gè)命令設(shè)置一個(gè)新的開(kāi)發(fā)環(huán)境。 原文地址:Django Development With Docker Compose and Machine 以下為譯文 Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器...
摘要:創(chuàng)建投票應(yīng)用采用創(chuàng)建的工程包括兩個(gè)層級(jí),一個(gè)是叫工程,另外一個(gè)是工程下面的應(yīng)用。一個(gè)工程可以包含多個(gè)應(yīng)用。路由配置分成兩個(gè)層級(jí),一個(gè)是在應(yīng)用層配置路由,另外一個(gè)是在工程層配置路由。 一般Django的網(wǎng)絡(luò)程序開(kāi)發(fā)步驟 配置開(kāi)發(fā)的環(huán)境 初始化項(xiàng)目 啟動(dòng)開(kāi)發(fā)服務(wù)器 創(chuàng)建應(yīng)用 創(chuàng)建View 配置訪問(wèn)View的路由 配置項(xiàng)目開(kāi)發(fā)環(huán)境 開(kāi)發(fā)一個(gè)新的項(xiàng)目,第一步就是配置項(xiàng)目的開(kāi)發(fā)環(huán)境。這里使用...
閱讀 1969·2021-09-30 09:46
閱讀 1378·2019-08-30 15:43
閱讀 1133·2019-08-29 13:28
閱讀 1934·2019-08-29 11:24
閱讀 1701·2019-08-26 13:22
閱讀 3981·2019-08-26 12:01
閱讀 1831·2019-08-26 11:33
閱讀 3253·2019-08-23 15:34