Edited at

Django 1.9 から 2.1 に上げる時の備忘録


Django 1.9 で作成されたアプリを 2.1.1 対応した際の手順を備忘録として、また同じことをやろうとしてる人への参考として残します。


1. urls.py の設定を変更します

参照:https://docs.djangoproject.com/ja/2.1/topics/auth/default/#all-authentication-views

urlpatterns=[] の中 url(r'^$', app.views.home, name='home') の url を re_path に置き換えます。

次にログイン・アウトビューが django.contrib.auth.viewsの login と logout メソッド から django.contrib.auth.views の LoginView と LogoutView クラスに変更になっているためここも変更します。

変更後の urls.py はこんな感じです。


urls.py

urlpatterns = [

# Examples:
re_path(r'^$', app.views.home, name='home'),
re_path(r'^contact$', app.views.contact, name='contact'),
re_path(r'^about', app.views.about, name='about'),
re_path(r'^login/$',
auth_views.LoginView.as_view(template_name="app/login.html"), name="login"),
re_path(r'^logout$',
auth_views.LogoutView.as_view(next_page='/'), name='logout'),

# Uncomment the admin/doc line below to enable admin documentation:
# re_path(r'^admin/doc/', include('django.contrib.admindocs.urls')),

# Uncomment the next line to enable the admin:
# re_path(r'^admin/', include(admin.site.urls)),
]


ちなみに、Logout 後のリダイレクトをトップページにしています。

適宜 next_page='/' の所を変更して下さい。

(settings.py に LOGOUT_REDIRECT_URL など設定しておくと良いかも)


2. settings.py の MIDDLEWARE_CLASSES を MIDDLEWARE に変更します。

参照:https://docs.djangoproject.com/ja/2.1/topics/http/middleware/#activating-middleware

単純に MIDDLEWARE_CLASSES を MIDDLEWARE に変更するだけです。

(ここはDjanog1.10以上なら既に変更されていると思います)

更に、'django.contrib.auth.middleware.SessionAuthenticationMiddleware' を削除します。

変更後の settings.py はこんな感じです。


settings.py

MIDDLEWARE = [

'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]


3. あとがき

余りやる事は無いかもしれませんが、情報を探すのに手間取ったため纏めておきました。

また、解決に至るまでに stack overflow の回答も参考にさせて頂きました事、ここに御礼申し上げます。