djangoのユーザ管理ではビルトインのviewが利用できる。
https://docs.djangoproject.com/en/1.5/topics/auth/default/#module-django.contrib.auth.views
上記URLに書いてあるようにloginの場合はurls.pyに
(r'^accounts/login/$', 'django.contrib.auth.views.login', {
'template_name': 'myapp/login.html'
})
みたいな感じで、viewにビルトインのビューと任意のテンプレートを設定してあげて、
テンプレートにはこれまたデフォルトで設定されているformを色々と弄ってあげればOK。
(※上記参照)
と、ここまでは使い方がソースコードとともに説明されてあるから良いけど、
logout以降はサンプルソースとか使い方が詳細に書いていない!
本当にどこにも書いてない上に、ググっても出てこないので、
django使いはソースコードを読んで理解しているのか!?
ということで、ソースコード直接読んで何となく理解しました。
基本的にはフィールドの設定とバリデーションを組んでいるだけで、
templateは利用するフィールドを理解していれば、
あとはPOSTするだけでOKな感じ。
具体的には
- {% form %}とか{% for field in form.base_fields %}{{ field }}{% endfor %}とかで
出力するフィールド名をメモ
- 対象フィールド名をformタグ内に書き込む(ex. {{ form.old_password}})
な流れで不自由なく使えると思う。
っていうかそんな大したソースじゃないのでgithubで解析するのが一番かも。
で、password_changeはこんな感じで動いた。
{% extends "user/base.html" %}
{% block title %}パスワード変更{% endblock %}
{% block contents %}
<form method="post" action="{% url 'user:password_change' %}">
{% csrf_token %}
<table>
<tr>
<td>旧パスワード</td>
<td>
{{ form.old_password }}
{% for error in form.old_password.errors %}
<span style="color:red;font-weight:bold;">{{ error }}</span>
{% endfor %}
</td>
</tr>
<tr>
<td>新パスワード</td>
<td>{{ form.new_password1 }}
{% for error in form.new_password1.errors %}
<span style="color:red;font-weight:bold;">{{ error }}</span>
{% endfor %}
</td>
</tr>
<tr>
<td>新パスワード(確認)</td>
<td>{{ form.new_password2 }}
{% for error in form.new_password2.errors %}
<span style="color:red;font-weight:bold;">{{ error }}</span>
{% endfor %}
</td>
</tr>
</table>
<input type="submit" value="パスワード変更" />
</form>
{% endblock contents %}
ユーザ管理関連ってログイン、ログアウト、パスワード変更、パスワードリセットとありふれた感じで
DRY原則に則るならば、ビルトインも使えこなせるようにならないと!と思いました。