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