もた日記

くだらないことを真面目にやる

Djangoメモ(22) : ユーザー認証を実装する〜ログインと独自テンプレートタグ、フィルタ

  • ログインページ作成
  • ログインフォーム作成
  • バリデーションメッセージ
  • 独自テンプレートタグ、フィルタを作成
  • 独自テンプレートタグ、フィルタのテスト
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にログイン機能を実装する。


ログインページ作成

前回ログアウト機能を実装したので次にログイン機能を実装するが、ログインもログアウト同様にビューが提供されているのでそれを利用する。
myproject/urls.pylogin/の行を追加。

from django.contrib import admin
from django.conf import settings
from django.urls import path, include
from django.contrib.auth import views as auth_views
from accounts import views as accounts_views
from boards import views

urlpatterns = [
    path('', views.home, name='home'),
    path('signup/', accounts_views.signup, name='signup'),
    path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    path('boards/<int:pk>/', views.board_topics, name='board_topics'),
    path('boards/<int:pk>/new/', views.new_topic, name='new_topic'),
    path('admin/', admin.site.urls),
]
続きを読む

Djangoメモ(21) : ユーザー認証を実装する〜ログアウト

  • ログアウトビュー
  • ログアウトメニュー追加
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にログアウト機能を実装する。


ログアウトビュー

ドキュメントによるとDjangoではログイン、ログアウト、パスワード管理のビューは提供されている(サインアップは提供されていない)のでそれを利用する。ただし、テンプレートに関しては提供されていないので自分で実装する必要がある。

以下のようにURLConfを設定すると、

urlpatterns = [
    path('accounts/', include('django.contrib.auth.urls')),
]

下記URLの全パターンが有効になる。

accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']
続きを読む

Djangoメモ(20) : ユーザー認証を実装する〜サインアップのテストとフォームの改良

  • サインアップのテスト
  • サインアップ成功時のテスト
  • サインアップ失敗時のテスト
  • サインアップフォームにEメールフィールド追加
  • テストの構成を変更
  • サインアップフォームのテンプレート変更
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考に認証関連のテストを作成してみる。


サインアップのテスト

前回サインアップ機能を作成したのでサインアップのテストを作成する。
accounts/tests.pyを以下のように修正。

from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse, resolve
from django.test import TestCase
from .views import signup

class SignUpTests(TestCase):
    def setUp(self):
        url = reverse('signup')
        self.response = self.client.get(url)

    def test_signup_status_code(self):
        self.assertEquals(self.response.status_code, 200)

    def test_signup_url_resolves_signup_view(self):
        view = resolve('/signup/')
        self.assertEquals(view.func, signup)

    def test_csrf(self):
        self.assertContains(self.response, 'csrfmiddlewaretoken')

    def test_contains_form(self):
        form = self.response.context.get('form')
        self.assertIsInstance(form, UserCreationForm)
続きを読む

Djangoメモ(19) : ユーザー認証を実装する〜サインアップ(ユーザー登録)

  • ユーザー認証
  • accountsアプリ作成
  • サインアップページ作成
  • フォーム作成
  • ビューの処理
  • データベースの確認
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にユーザー認証を実装してみる。


ユーザー認証

Djangoの認証システムを使用して下記機能が使えるユーザー認証を実装していく。
なお、チュートリアルはDjango 1.11で書かれているためDjango2.0ではもっと良い実装方法があるかもしれないが、まずはチュートリアル通りに実装してみる。

  • サインアップ(ユーザー登録)
  • ログイン
  • ログアウト
  • パスワードリセット
  • パスワード変更
続きを読む

Djangoメモ(18) : django-widget-tweaksを使用してBootstrapのフォームを作成する

  • django-widget-tweaksのインストール
  • テンプレートの編集
  • 再利用可能なテンプレート
  • フォームのテストを追加
  • (参考)django-widget-tweaksで発生したエラー
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にdjango-widget-tweaksを使用してBootstrapのフォームを作成してみる。


django-widget-tweaksのインストール

チュートリアルではdjango-widget-tweaksを使用しているが、Django 2.0ではエラーが発生(後述)したのでdjango-widget-tweaksをフォークしたdjango-widgets-improvedをインストールする(ただしこの記事ではdjango-widget-tweaksとして説明する)。
django-widget-tweaksはテンプレートでフォームをレンダリングするときにCSSクラスやHTML属性を変更できるモジュール。

$ pip install django-widgets-improved
続きを読む