ページ

2008年11月27日

Djangoのユーザ認証のあれこれ

Djangoでユーザ認証の仕組みはこのドキュメントにいろいろ書かれています。ログインの方法やユーザ情報の扱いはちゃんと書いてあるので、困ることはほとんどありません。

ログアウトはどうするのかなー、と思ってドキュメントを読んでもよくわかりません。結局urlpatternsに
(r'^accounts/logout/$', 'django.contrib.auth.views.logout'),

と書いてあげるだけでとりあえずは良さそうです。logout後の画面が/accounts/になってしまいますが、とりあえず、redirectさせて回避。こんなんでいいのだろうか?

ドキュメントを読んでいるとpassword_changeとかでパスワードの変更ができるらしいです。ログアウトを調べたついでにpassword_changeもやってみます。urlpatternsに次のように書けばよいらしい。
(r'^accounts/change-password/$', 'django.contrib.auth.views.password_change',
{'post_change_redirect': '/'}),
post_change_redirectを指定しないと例外がでたのでとりあえず、トップ画面に戻るようにします。でも、referの所に戻ればいいような気もしなくもないけど・・・。で、このpassword_changeはregistration/password_change_form.htmlがデフォルトのテンプレートして使われるので作ってあげます。僕のテンプレートはこんな感じ。

{% extends "base.html" %}

{% block content %}

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

<form method="post" action=".">
<table>
<tr>
<td>{{ form.old_password.label_tag }}</td>
<td>{{ form.old_password }}</td>
</tr>
<tr>
<td>{{ form.new_password1.label_tag }}</td>
<td>{{ form.new_password1 }}</td>
</tr>
<tr>
<td>{{ form.new_password2.label_tag }}</td>
<td>{{ form.new_password2 }}</td>
</tr>
</table>

<input type="submit" value="Change" />
<input type="button" value="Cancel" onclick="javascript:window.location='/';"/>
<input type="hidden" name="next" value="/" />
</form>

{% endblock %}

というか、login.htmlとほぼ同じ。formという変数に何があるかはdjango.contrib.auth.formを読まないといけない?というか、form.xxxといちいちテンプレートに書かないといけないものなの?まだ、あまり、フォームの取り扱い方は調べていないので、今はこの程度にしておきましょう。
どうでもいいけど、password1とpassword2っていうフィールドはないよなー。

それから、簡単に新規のユーザを作る方法はあるんだろうか?

2 件のコメント:

makoto tsuyuki さんのコメント...

テーブルで表示するなら、{{ form }}でtableタグの中身として表示されますよ。{[ form.as_ul }}とかもあった気がする。
ユーザ登録は、パスワード変更と似た感じでビュー関数が用意されてます。

あ、そんなことを書きたいんじゃなくって、habuってどうやったらたどり着けるのかな、と。

liris さんのコメント...

どうもです。formはそうなのか。

habuはここ

とりあえず、作って公開しているものリスト