この記事について
Django Girls Tutorial
の続編(おまけ?)である、
Django Girls Tutorial: Extensions
を読んでいて少しはまったので、解決策を備忘として書く。
環境
・python3.6
・Django2.1
・Ubuntu18
何が起こったか
上記 Django Girls Tutorial: Extensions の中の
Homework: Adding security to your website
を読んでいた。
このチャプターの内容は、
・本編で作ったブログサイトにログイン・ログアウトの機能をつける
・ログイン中の人しか記事の作成・編集・削除ができないようにする
というもの。
一番最後のところで、ログイン・ログアウト画面のパスを追加するために
mysite/urls.pyを下記のように変更したところエラー
from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url
from django.contrib.auth import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
path('accounts/login/', views.login, name='login'),
path('accounts/logout/', views.logout, name='logout', kwargs={'next_page': '/'}),
]
(Django Girlsのサイトでは上記のように path() は使わず url() と正規表現でパスを指定しているが、Django2 ではパスを指定する際に正規表現ではなく path() を使うといいよとのことなので path() を使うようにしている。
Django2.0以降の変更点で気づいたポイント:path設定 "path"を使ったinclude)
コンソールに書かれたエラー内容が
AttributeError: module 'django.contrib.auth.views' has no attribute 'login'
とのこと。django.contrib.auth.views が login の属性を持っていないらしい。
上記の文字列でググると stack overflow の記事
AttributeError: module Django.contrib.auth.views has no attribute
が出てきたが、真似してみるも上手くいかず。
解決方法
最終的に
Django2 でユーザー認証(ログイン認証)を実装するチュートリアル -2- サインアップとログイン・ログアウト
を参考にして
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
path('accounts/', include('django.contrib.auth.urls')),
]
とすると動いた。
もともとDjango側でユーザー認証用のurlsが用意されているっぽい。
Django2になって仕様が変わったのだろうか。