ユーザー登録で悩んでみる
チュートリアルも無事に終わったので
一番使いそうな機能、ユーザー登録を作ってみたいと思います。
フォームとフィールド,マニピュレータ : Django オンラインドキュメント和訳
ここで説明しているフォーム/マニピュレータシステムは,次の Django リリース では別のシステムに置き換えられる予定です.スクラッチで新たなアプリケーショ ンを開発するつもりなら,このシステムを学ぶために時間を浪費しないよう強く勧 めます.その代わりに,新たなフォームシステムである django.newforms の使 い方を学んで利用しましょう. newforms のドキュメント は現在整備中です.
http://michilu.com/django/doc-ja/forms/
と書いてありますので newforms を使ってみたいと思います。
まず、forms.py を書いてみる。
# -*- encoding: utf-8 -*- from django import newforms as forms class UserRegistrationForm( forms.Form ): """ユーザー登録用フォーム """ username = forms.CharField( required = True, max_length = 30, label = 'UserName' ) password = forms.CharField( required = True, max_length = 128, widget = forms.PasswordInput ) email = forms.EmailField( required = True, label = 'email address' )
で、views.py
# -*- encoding: utf-8 -*- from django.conf import settings from django import newforms as forms from django.contrib.auth.models import User from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from forms import UserRegistrationForm def regist_user( request ) : if request.user.is_authenticated(): pass # TODO if request.POST : data = request.POST.copy() form = UserRegistrationForm( data ) if form.is_valid() : username = data[ 'username' ] email = data[ 'email' ] password = data[ 'password' ] user = User.objects.create_user( username, email, password ) user.save() return HttpResponseRedirect( '/admin' ) else : return render_to_response( 'regist/register.html', { 'form': form } ) else : # TODO form = UserRegistrationForm() return render_to_response( 'regist/register.html', { 'form': form } )
うーん、ダメダメです。
正常系は通りますが、
ユーザーネームがユニークかどうかのチェックをしていないので
user.save()でエラーが出ます。
formのチェック以外にもこっちもチェックしなくてはいけませんね……
あと、form_for_model() を使った方が良いかもしれません。
人生ってそういう物です。
と、ここで色々調べていたら
django-registration - Google Code
こんな物を発見しました!!
これを使うと良くある登録フォームのように
メールを送ってメールアドレスの確認後、登録できたり出来るみたいです。
というわけで、次回はdjango-registrationに翻弄されてみたいと思います。