django從1.11升級到2.1.5

升級開發(fā)環(huán)境的時候把python從2.7升級到了3.7,同時把django從1.11直接升級到了2.1.5

原文地址http://www.wantchalk.com/c/language/python/2019/01/31/update-django1.11-to-django2.1.5.html

昨天升級系統(tǒng)和開發(fā)環(huán)境,從zsh vim 到mysql, 從ruby 到j(luò)ava 到python,從sublime到pycharm,xcode,從jenkins到docker,nexus, 幾乎所有在用的開發(fā)環(huán)境,編輯器,系統(tǒng)包,軟件包,框架等等全部升級了一遍, 幾乎所有在用的全部沒有放過,連帶的把生產(chǎn)環(huán)境也一起升級,所以包括docker的鏡像也全部從新編譯.

這一頓操作用了我足足兩天時間.搞干凈了好過年哈!

項目用的比較多的就是django了,之前一直是python2.7 +django1.11(好像是去年升級到django1.11的), 今天一咬牙直接把升級python 3.7.2, django2.1.5,于是就有非常多的痛苦的事情了.

拿重要的說吧


1.配置文件

(1).中間件配置

原來的

MIDDLEWARE_CLASSES = (
...
)

改成

MIDDLEWARE = (
...
)

(2).SessionAuthenticationMiddleware不再支持

直接注釋掉

    # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', remove from django2

(3).AUTHENTICATION_BACKENDS的配置從tuple變成array

我不記得是不是必要的了

AUTHENTICATION_BACKENDS = (
    ...
)

改成

AUTHENTICATION_BACKENDS = [
    ...
]

(4).djangorestframework的配置(非必要,如果沒有使用的話)

    'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',
                                'rest_framework.filters.OrderingFilter'),

改為

    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',
                                'django_filters.rest_framework.OrderingFilter'),

oauth相關(guān)的DEFAULT_PERMISSION_CLASSES,下面這些好像都用不了了

        # 'oauth2_provider.contrib.rest_framework.IsAuthenticatedOrTokenHasScope',
        # 'rest_framework.permissions.TokenAuthentication',
        # 'rest_framework.permissions.IsAuthenticatedOrReadOnly',
        # 讀寫都必須經(jīng)過認證
        # 'rest_framework.permissions.IsAuthenticated',

改成

'DEFAULT_PERMISSION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.TokenHasReadWriteScope',
)

2.django的輔助類變更

(1).url里的include

現(xiàn)在要從django.url來import include, 過去是django.conf.url

(2).url里添加app_name

如果在urls.py里使用了namespace, 那么請在相應(yīng)的urls文件的前面添加app_name

    # 視頻
    url(r'^videos/', include('applications.videos.urls', namespace='videos')),

那么要在applications.videos.urls里添加

app_name = 'videos'

如果不這樣就會報如下錯誤

   'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

(3).如果自己實現(xiàn)了AUTHENTICATION_BACKENDS

那么authenticate方法做如下變化

    def authenticate(self, username=None, password=None):

改為

    def authenticate(self, request, username=None, password=None, **kwars):

(4) reverse移動了位置

from django.core.urlresolvers import reverse

改為

from django.urls import reverse

(5).django.contrib.auth里的視圖做了變更

如果使用django auth里的login logout等視圖,那么在url里原來你是這么寫

from django.contrib.auth import views as django_auth_view

    url(r'^logout/$', django_auth_view.logout,

現(xiàn)在改成

    url(r'^logout/$', django_auth_view.LogoutView.as_view(),

另外如果使用了自定義模板,原來你是這么寫的

    url(r'^login/$',
        auth_views.login,
        {'template_name': 'registration/v2/login.html'},
        name='login'),

現(xiàn)在要改成

     url(r'^login/$',
         auth_views.LoginView.as_view(template_name="registration/v2/login.html"),
         name='login'),

(6) unquote 和quote 這是python范疇的,我也就寫這了

# 過去
from urllib import unquote
# 現(xiàn)在
from urllib.parse import unquote

(7)自定義標簽

# 過去
@register.assignment_tag
# 現(xiàn)在
@register.simple_tag


3.model變化

on_delete加入強制要求

升級完很多人會遇到這個錯誤

TypeError: __init__() missing 1 required positional argument: 'on_delete'

過去在model定義的時候OneToOneFieldForeignKey沒有強制要求, 現(xiàn)在強制要求要加上on_delete屬性.為了快速的解決問題,我全部加上了如下代碼

on_delete=models.SET_NULL
# 相應(yīng)的需要把 null=True 加上

其實項目本來就應(yīng)該這樣去設(shè)計,我們在設(shè)計數(shù)據(jù)庫的時候就應(yīng)該解耦去掉關(guān)聯(lián)性,另外不要輕易的刪除數(shù)據(jù). 特別是在做微服務(wù)的時候,表與表之間最好零關(guān)聯(lián)

4.djangorestframework

視圖里的filter_backend

過去是

    filter_backends = (filters.DjangoFilterBackend,)

現(xiàn)在filter做了變化

from django_filters.rest_framework.backends import DjangoFilterBackend
# 然后
    filter_backends = (DjangoFilterBackend,)

如果在settings里設(shè)置了默認的filter,可以在ViewSet里省去此屬性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棚蓄,隨后出現(xiàn)的幾起案子颠毙,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朵你,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機澈蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卓研,“玉大人趴俘,你說我怎么就攤上這事∽嘧福” “怎么了寥闪?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長磨淌。 經(jīng)常有香客問我疲憋,道長,這世上最難降的妖魔是什么梁只? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任缚柳,我火速辦了婚禮,結(jié)果婚禮上搪锣,老公的妹妹穿的比我還像新娘秋忙。我一直安慰自己,他們只是感情好构舟,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布灰追。 她就那樣靜靜地躺著,像睡著了一般狗超。 火紅的嫁衣襯著肌膚如雪弹澎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天努咐,我揣著相機與錄音苦蒿,去河邊找鬼。 笑死麦撵,一個胖子當著我的面吹牛刽肠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播免胃,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼音五,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了羔沙?” 一聲冷哼從身側(cè)響起躺涝,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坚嗜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夯膀,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年苍蔬,在試婚紗的時候發(fā)現(xiàn)自己被綠了诱建。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡碟绑,死狀恐怖俺猿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情格仲,我是刑警寧澤押袍,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站凯肋,受9級特大地震影響谊惭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侮东,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一圈盔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苗桂,春花似錦药磺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽木缝。三九已至便锨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間我碟,已是汗流浹背放案。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矫俺,地道東北人吱殉。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像厘托,于是被迫代替她去往敵國和親友雳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 模塊間聯(lián)系越多铅匹,其耦合性越強押赊,同時表明其獨立性越差( 降低耦合性,可以提高其獨立性)包斑。軟件設(shè)計中通常用耦合度和內(nèi)聚...
    riverstation閱讀 2,070評論 0 8
  • 切換到創(chuàng)建項目的目錄 cd C:\Users\admin\Desktop\DjangoProject創(chuàng)建名為pr...
    在努力中閱讀 3,275評論 2 3
  • 一流礁、Django框架前言知識: 1涕俗、C/S和B/S的區(qū)別: C/S結(jié)構(gòu)軟件:客戶端/服務(wù)端軟件,即客戶端要自己下載...
    月下獨酌123閱讀 4,532評論 0 36
  • 已經(jīng)同步到gitbook神帅,想閱讀的請轉(zhuǎn)到gitbook: Django 1.10 中文文檔 URL dispatc...
    leyu閱讀 14,202評論 0 16
  • 《時間的天使》運動版系列(版主:謝華魁) 室外運動該如何準備找御?——以跑步為例 (作者:張興亮) 室外運動多種...
    時間的天使閱讀 216評論 0 0