この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:2
ページ更新者:T
更新日時:2019-05-28 21:13:21

タイトル: ログイン機能
SEOタイトル: 【django】ログイン機能

概要

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 = '/'