您好,登錄后才能下訂單哦!
小編給大家分享一下Django 2.0版本有哪些特性,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一、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<year>[0-9]{4})/$', views.year_archive),
可以寫作:
path('articles/<int:year>/', views.year_archive),
新語法支持強制定義參數類型。例子中只接收整數型年份參數,不再接收字符串類型,同時“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從句;
Pagination分頁
增加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)
5. Index不再接收位置參數
例如下面的用法將導致異常:
models.Index(['headline', '-pub_date'], 'index_name')
要提供參數關鍵字,改寫為:
models.Index(fields=['headline', '-pub_date'], name='index_name')
6. call_command()將驗證它接收的選項
對于使用選項而不是使用parser.add_argument()
進行自定義的管理命令,需要添加一個stealth_options屬性,如下所示:
class MyCommand(BaseCommand): stealth_options = ('option_name', ...)
7. SQLite現在支持外鍵約束
另外,Django2.0還廢棄和移除了一些方法和屬性。
以上是“Django 2.0版本有哪些特性”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。