Django從1.8升級到2.0注意事項

原文照搬:php

因爲Django的產品週期問題,咱們決定將Django從當前開發的1.8版本升級到2.0版本,此新最版本已再也不支持python2,因此開發語言也須要相應升級到3.6版本。其間幾個重要的變動技術點節錄以下(以更改過程爲主,不區別django仍是python變動,且django中的變化也不同是2.0中才開始具備的):html

 6d23625d8a884ea4bee46a3b31bf1021d53c8d6c

1, print

Python3中,print從語句變爲函數,因此全部的print語句須要改爲print()python

2,on_delete

在django 2中,models中on_delete=models.XXX再也不是默認選項,須要顯性指定django

# 表示外鍵關聯到做者表,看成者表刪除了該條數據,圖書表中不刪除,僅僅是把外鍵置空
    author = models.ForeignKey(AuthModel, null=True, blank=True, on_delete=models.SET_NULL)

3, reverse

在新版本django中,這些包再也不歸於core,而是屬於django.urls包,須要更改import路徑dom

from django.urls import reverse

4, MIDDLEWARE

在新版本django中,中間件的key值由MIDDLEWARE_CLASSES變動爲MIDDLEWAREide

5, SessionAuthenticationMiddleware

在新版本django中SessionAuthenticationMiddleware這個中間件不須要了。函數

6,render_to_respons e

新版本django中render_to_response不建設使用,改成使用render函數。加密

7, 從__unicode__到__str__

新版本python後,django的models定義須要從__unicode__變動到__str_url

8,dict的'has_key'方法棄用

新版python中字典的has_key方法取消,建議用」str」 in dict判斷spa

9, Direct assignment to the forward side of a many-to-many set is prohibited

新版django中,orm多對多外健再也不用=等賦值,改成set方法

new_list = [obj1, obj2, obj3]

e.related_set = new_list ===》 e.related_set.set([obj1, obj2, obj3])

10, Only byte strings can be passed to C code

在使用PyCryptodome做AES加密解密時,注意python3裏decode和encode的使用

11,html輸出時,byte如何轉換成unicode?(網頁輸出是b’’)

str(b'','utf8')能夠吧BYTES轉換成unicode;bytes('','utf8')反向操做

12, orm migrate

在django升級以後,makemigration重做,migrate可能須要手工增長on_delete=models.XXX

13,python中virtualenv如何具備通用性?

若是安裝好新版python3解釋以後,經過更改active文件中的路徑,能夠實現拷貝目錄通用.

參考文檔:https://yq.aliyun.com/articles/324355

 

 

管理員下修改:

C:\Program Files\Anaconda3\Lib\site-packages\formtools\wizard打開views.py文件

修改第5行內容爲:

from django.urls import reverse

推薦一個改錯的參考文檔:

django2.0集成xadmin0.6報錯集錦:http://www.lybbn.cn/data/bbsdatas.php?lybbs=50

相關文章
相關標籤/搜索