flatpageで認証を使ってみる

Djangoに備わっている認証機能を利用します。
Django でのユーザ認証を参考に進めていきます。
追記:Djangoで基本的なログイン・ログアウト処理をしてみる も参考になります


flatpageでは、作成したページごとに設定することが出来ます。
Admin Interfaceでflatpagesのフラットページをクリック。
認証したいページをクリック。
画面下の"Advanced options"の表示をクリック。
"登録が必要です"のところのチェックボックスをクリックして保存。
これで、下準備第一弾は終わり。
この時にAdmin Interfaceもログアウトしておいてください。


次に、先ほどチェックしたURLにアクセス。
"Page not found"が表示されると思います。
表示されないでコンテンツの内容が表示される場合は、ログインの状態になっている可能性があるのでログアウトして再度アクセスしてください。
以下にする作業は、ドキュメントの"ログインユーザだけがアクセスできるように制限をかける"に書かれていることと同じことをします。
まず、urls.pyを編集し以下を追加します。

     (r'^accounts/login/$', 'django.contrib.auth.views.login'),

を追加。
再度、アクセスしてみてください。
TemplateDoesNotExistと表示されるはずです。
"registration/login.html"がないといわれます。
なので、settings.pyで設定した"TEMPLATE_DIRS"の直下に"registration"フォルダを作成して、login.htmlを作成。
内容は、

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

<form method="post" action=".">
<table>
<tr><td><label for="id_username">Username:</label></td><td>{{ form.username }}</td></tr>
<tr><td><label for="id_password">Password:</label></td><td>{{ form.password }}</td></tr>
</table>

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

再度アクセス。
すると、Username、password、"login"ボタンが表示されます。
Admin Interfaceで入力しているUsername、passwordを入力して"login"ボタンをクリックしてください。
すると、認証したページが表示されると思います。


時間が無くなったので、ログアウトはまた今度。
その他の組み込みビュー
django.contrib.auth.views.logoutを参考にすれば簡単に出来そうです。
ここまで、あわせて100行もプログラミングもしていないのにコメント、認証の機能が付けられるDjangoって凄いと思いません?


そういえば、認証されているかどうかを判断するtemplatetagってあるのかな?
調べてみよう。
追記:
と思ったら追記したサイトにやり方がのっていた :)
これで、認証されていたらさらにコンテンツが見れるというような機能が付けられそうだ :)