Posted at

Django Girls Tutorial: Extensions のユーザー認証のところではまった話


この記事について

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を下記のように変更したところエラー


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- サインアップとログイン・ログアウト

を参考にして


mysite/urls.py

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になって仕様が変わったのだろうか。