2013-11-03

djangoのbuilt-in viewの利用

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な感じ。

 

具体的には

  1. {% form %}とか{% for field in form.base_fields %}{{  field }}{% endfor %}とかで

出力するフィールド名をメモ

  1. 対象フィールド名を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原則に則るならば、ビルトインも使えこなせるようにならないと!と思いました。

このエントリーをはてなブックマークに追加