もた日記

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

Djangoメモ(25) : login_requiredデコレータでビューをログイン済みユーザーのみに制限

  • login_requiredデコレータ
  • ログイン後のリダイレクト先
  • login_requriedのテスト
  • Topic作成者としてログインユーザーを指定
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にビューをログイン済みユーザのみに制限してみる。


login_requiredデコレータ

前回まででユーザー認証機能は実装したので、新しいTopicを作成する機能をログイン済みユーザのみに制限する。

f:id:wonder-wall:20180325132421p:plain

上の画像からわかるように現時点ではログインしていないユーザーでもアクセスできるようになっている。

続きを読む

Djangoメモ(24) : ユーザー認証を実装する〜パスワード変更

  • パスワード変更
  • パスワード変更のテスト
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にパスワード変更機能を実装する。


パスワード変更

サインアップ、ログアウト、ログイン、パスワードリセット機能を実装してきたが、最後にパスワード変更機能を実装する。
Djangoではパスワード変更のビューも提供されているのでmyproject/urls.pyに以下の2行を追加。

    path(
        'settings/password/',
        auth_views.PasswordChangeView.as_view(
            template_name='password_change.html'),
        name='password_change'),
    path('settings/password/done/',
        auth_views.PasswordChangeDoneView.as_view(
            template_name='password_change_done.html'),
        name='password_change_done'),
続きを読む

Djangoメモ(23) : ユーザー認証を実装する〜パスワードリセットとメール送信

  • パスワードリセットの流れ
  • メール送信設定
  • メールドアレス入力(password_reset.html)
  • メール送信完了(password_reset_done.html)
  • 新パスワード登録(password_reset_confirm.html)
  • パスワードリセット完了(password_reset_complete.html)
  • パスワードリセットのテスト
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にパスワードリセット機能を実装する。


パスワードリセットの流れ

ログイン、ログアウトと同様にパスワードリセットのビューもDjangoで提供されているが以下のようにメール送信など手順が多い。

  1. パスワードリセットを開始するフォームでEメールアドレスを入力するとパスワードリセットリンクが記載されたメールが送信される(reset/
  2. メールが送信されたことをユーザに伝える画面が表示される(reset/done/
  3. パスワードリセットリンクにアクセスして表示されるフォームで新パスワードを入力(reset/<uidb64>/<token>/
  4. パスワードリセットが完了したことをユーザに伝える画面が表示される(reset/complete/
続きを読む

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']
続きを読む