LoginSignup
6
1

More than 5 years have passed since last update.

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

Posted at

この記事について

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

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1