溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django2.2版本都有哪些新特性

發(fā)布時間:2020-08-25 11:07:00 來源:億速云 閱讀:167 作者:Leah 欄目:編程語言

Django2.2版本都有哪些新特性?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

2019年4月1日,Django官方如期發(fā)布了2.2版本,這是一個LST版本,將持續(xù)維護和安全更新到2022年4月,也就是說至少有3年的生命周期,所以這是一個可以長期使用的版本。上一個LST版本Django1.11將在2020年4月停止維護。

在這里不得不吐糟一下Django的版本升級路線,版本號提升得太快了?。?.2之后就是3.0,并且3.0會在2019年12月份正式發(fā)布,這給一些初學者或者小公司帶來太多的困惑,不知道該學或者該用哪個版本了。個人建議Python2.7沒得選,只能使用Django1.11版本。Python3.x的,直接選最新版本或者最近的LST版本,差別不大。

2.2版本依然包含了一些新特新,和一些對前期版本不兼容的說明。

Python兼容性

Django2.2支持Python3.5、3.6和3.7。

新特性

約束

新的CheckConstraint和UniqueConstraint類現(xiàn)在開始支持自定義數(shù)據(jù)庫約束,通過使用Meta.constraints選項。

小特性

1. django.contrib.admin

為TabularInline添加了列頭的CSS類

2. django.contrib.auth

HttpRequest將被作為第一個位置參數(shù)傳遞給RemoteUserBackend.configure_user()方法。

3. django.contrib.gis

Envelope函數(shù)開始支持Oracle。 coveredby和covers查詢現(xiàn)在支持SpatiaLite 不再支持GDAL1.9和1.10

4. django.contrib.staticfiles

為collectstatic --ignore選項添加路由,以支持類似/vendor/*.js的模式

5. Database backends

為SQLite上的QuerySet.iterator()添加輸出流

6. Generic Views

新的View.setup鉤子將在調(diào)用dispatch()方法之前初始化視圖屬性。

7. Internationalization

現(xiàn)在支持亞美尼亞語言

8. Management Commands

新的選項--force-color強制對輸出添加顏色inspectdb命令將為PostgreSQL數(shù)據(jù)庫的外部表創(chuàng)建模型inspectdb --include-views將為Oracle和PostgreSQL的物化視圖創(chuàng)建模型inspectdb --include-partitions將為PostgreSQL的分區(qū)表創(chuàng)建模型。在Oracle和PostgreSQL上inspectdb命令將內(nèi)省DurationField字段類型,在SQLite上內(nèi)省AutoField字段類型。在Oracle中,dbshell將被rlwrap包裝起來。rlwrap提供一個命令歷史記錄和鍵盤輸入編輯功能。新的makemigrations --no-header選項可以在生成migration文件的時候避免寫入頭部注釋。runserver命令現(xiàn)在可以使用Watchman插件,用于提高監(jiān)視大量修改文件的性能。并且不再支持pyinotify插件。

9. Migrations

新的migrate --plan選項將打印出遷移操作的列表NoneType現(xiàn)在可以在migrations中序列化了現(xiàn)在可以為migrations注冊自定義的序列化器了

10. Models

為PostgreSQL ,新增Index.opclasses類通過Index.condition,支持分區(qū)索引新增NullIf和Reverse數(shù)據(jù)庫函數(shù)為QuerySet.bulk_create()函數(shù)新增ignore_conflicts參數(shù),此參數(shù)如果設置為True,將忽略在添加數(shù)據(jù)行時的錯誤。新增ExtractIsoYear函數(shù)新增QuerySet.bulk_update()方法,提高批量更新指定字段的效率對于Model.save()、QuerySet.update()和Model.delete()等單獨的操作,Django將不再啟動一個事務,這有助于提高自動提交數(shù)據(jù)庫操作的性能SQLite現(xiàn)在支持StdDev和Variance函數(shù)Aggregate類現(xiàn)在開始支持DISTINCT聚合操作RelatedManager.add()、create()、remove()、set()、get_or_create()、update_or_create() 等方法現(xiàn)在支持多對多關系。SQLite現(xiàn)在要求最低版本是3.8.3mysqlclient現(xiàn)在要求最低版本是1.3.13

11. Requests and Responses

新增HttpRequest.headers,可以快速地訪問請求的頭部信息

12. URLs

新增的ResolverMatch.route屬性保存了匹配的URL模式的路由

13. Validators

MaxValueValidator、MinValueValidator、MinLengthValidator和MaxLengthValidator 現(xiàn)在可以接收一個可調(diào)用的limit_value參數(shù)值。

2.2版本中向后不兼容的地方

Admin actions的繼承方式發(fā)生變化

原來是:

from django.contrib import admin
class BaseAdmin(admin.ModelAdmin):
    actions = ['a']class SubAdmin(BaseAdmin):
    actions = ['b']

在過去,SubAdmin將同時具有'a'和'b'動作,這其實不符合Python繼承語法的,因為actions屬性被重寫了。

現(xiàn)在,Django2.2將上面的做法改變成更符合Python繼承機制,所以要達到上面目的的話,我們需要修改成下面的做法:

class SubAdmin(BaseAdmin):
    actions = BaseAdmin.actions + ['b']

cached_property語法發(fā)生改變

在過去,我們都是這么使用alias的:

from django.utils.functional import cached_propertyclass A:
    @cached_property
    def base(self):
        return ...
    alias = base

在Python3.6之后,這可能會導致TypeError,所以現(xiàn)在修改成下面的做法:

from django.utils.functional import cached_propertyimport operatorclass A:
    @cached_property
    def base(self):
        return ...
    alias = property(operator.attrgetter('base'))

總結(jié):2.2其實沒啥新東西!

最后附上Django的版本路線圖和生命周期圖:

Django2.2版本都有哪些新特性Django2.2版本都有哪些新特性Django2.2版本都有哪些新特性

Django的版本號提高得太快我已經(jīng)無力吐槽了。2.2之后就是3.0,這是幾個意思?

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI