20.

【django】ログイン 認証機能

ページの作成
テンプレートを更新

ページの作成

親となるページを選択してください。

ページは必ず何かしらの親ページに紐づきます。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球

子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール

親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!

概要

djangoは標準で認証機能が搭載されている。

今回はそちらを利用する。

 

認証系テーブルの作成

マイグレーションを実行することで認証系テーブルが作成される。

python manage.py migrate

 

URLの定義

認証機能を有効化させるにはurl.pyに以下の記述を追加する。

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']

 

ユーザー登録機能の作成

予め定義されているものを出来るだけ使用するので最低限の実装で済む。

まずは登録画面に遷移するaタグをどこか適当なテンプレートに記述する。

<a href="{% url 'signup' %}">ユーザー登録</a>

 

url.pyに以下の記述を追加する。

from common.views.signup import SignupView

urlpatterns = [

    ....

    path('signup/', SignupView.as_view(), name='signup'),

]

上記の様に適当なビューを用意する。

 

次にビュー自体の定義をする。

登録画面を開くだけなので簡単な実装とする。

class SignupView(CreateView):

    form_class = UserCreationForm

    template_name = "signup.html"

    success_url = reverse_lazy('login')

form_classには事前定義されているUserCreationFormを必ず指定すること。

success_urlはユーザー作成後のリダイレクト先を指定する。

 

次に上記でtemplate_nameに指定したテンプレートの定義をして終わり。

{% extends "base.html" %}

{% block content %}

<form method="post" action="">
    {% csrf_token %}

    {{ form.as_p }}

    <input type="submit">
</form>

{% endblock %}

 

ログインテンプレートの定義

ログイン画面のテンプレートを用意します。

以下、公式サイトから引用した簡単なログイン画面です。

templates/registration/login.html

{% extends "common/base.html" %}

{% block content %}

{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}

{% if next %}
    {% if user.is_authenticated %}
    <p>Your account doesn't have access to this page. To proceed,
    please login with an account that has access.</p>
    {% else %}
    <p>Please login to see this page.</p>
    {% endif %}
{% endif %}

<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
    <td>{{ form.username.label_tag }}</td>
    <td>{{ form.username }}</td>
</tr>
<tr>
    <td>{{ form.password.label_tag }}</td>
    <td>{{ form.password }}</td>
</tr>
</table>

<input type="submit" value="login">
<input type="hidden" name="next" value="{{ next }}">
</form>

{# Assumes you setup the password_reset view in your URLconf #}
<p><a href="{% url 'password_reset' %}">Lost password?</a></p>

{% endblock %}
 

呼び出し元のリンクは以下の様に記述します。

<a href="{% url 'login' %}">ログイン</a>

 

ログイン後のリダイレクト先

setting.pyに以下の記述をすることでログイン後のリダイレクト先を設定することが出来る。

LOGIN_REDIRECT_URL = '/'

 

ログアウトボタンの作成

ログアウト機能も事前に作成されているのでログアウトボタンを設置するだけで良いです。

<a class="btn" href="{% url 'logout' %}">ログアウト</a>

 

ログアウト後のリダイレクト先

setting.pyに以下の記述をすることでログアウト後のリダイレクト先を設定することが出来る。

LOGOUT_REDIRECT_URL = '/'

 

子ページ
子ページはありません
同階層のページ
  1. 環境構築とプロジェクト/アプリの作成
  2. MVC(MVT)のそれぞれの使い方と説明
  3. データベースへの接続と操作
  4. Django Administration
  5. git管理
  6. エラー一覧
  7. バージョンの確認方法
  8. ログ出力方法
  9. SQLのログ出力方法
  10. ログのローテート設定
  11. settings.pyの定数にアクセスする方法
  12. 本番環境へのインストールとアプリのデプロイ(apache編)
  13. 本番環境へのインストールとアプリのデプロイ(nginx編)
  14. djangoアプリの本番の開始URLを変更する
  15. 静的(static)ファイルの置き場所と読み込み(画像、css、js )
  16. CSRFトークンをAjaxで使用する方法
  17. ajaxの使用例(POST編)
  18. ファイルのアップロードとファイルの名前
  19. クイックスタート/チュートリアル
  20. ログイン機能
  21. テンプレート側のログイン判定
  22. ビュー側のログイン判定
  23. 管理者ユーザーの作成/判定と管理画面
  24. モデルのjson化とレスポンス
  25. runserverでポートを指定する方法
  26. cronによるバッチ実行
  27. テンプレートで利用する共通のcontextを定義する方法
  28. プログラムが本番サーバーで反映されない場合の対処法
  29. APIの作成
  30. cron用コマンド・ファイルの作成

最近の質問

コメント一覧

コメントがありません

ログインしなければコメント投稿はできません。