2009年12月1日火曜日

Django 0.96 向けのユーザー登録を 1.0 で動くように直した


 ユーザー登録自体は必要ないのだが、POST を使ってデータを送るサンプルで手元にあったのが、最新Pythonエクスプローラ の中のサンプルプログラム djmall のユーザー登録だけだったので、これを Ver 1.0 で動くようにした。

 一番戸惑ったのは、新規登録時の画面遷移がちょっとおかしい予想したのと違っていたこと。結局古い python + Django でプログラムを実際に動かして画面遷移を確認した。

 主な変更部分は以下の二つ。

  • User オブジェクトがだいぶ変わっていた。古いバージョンでは validation の機能もあったらしいが、1.0 からは 完全にモデルのサブクラスになっていて、validation は User から ModelForm で作ったフォームでおこなう
  • User のメンバ変数が変わっていた。last_login_date,last_login_time が last_login に、date_joined_date,date_joined_time が date_joined にそれぞれ一本化。validation に失敗したので、ソースを追っかけて判明。

 結果としてはこんなところだが、動くまでに2時間ほどかかってしまった。
 ま、POST 関連の動きもわかったし、良いことにしよう。

 ちなみに変更後のソースは以下のとおり。
from django.forms import ModelForm
class UserForm(ModelForm):
class Meta:
model = User

def regist(request):
if request.method == 'POST':
new_data = request.POST.copy()
now = datetime.now()
new_data.update({'last_login': now.strftime("%Y-%m-%d %H:%M"), 'date_joined': now.strftime("%Y-%m-%d %H:%M")})
manipulator = UserForm(new_data)
if manipulator.is_valid():
username = new_data['username']
email = ''
password = new_data['password']
user = User.objects.create_user(username, email, password)
user.is_staff = False
user.is_superuser = False
user.save()
return HttpResponseRedirect("%s%s" % (settings.MALL_BASE, '/accounts/login/'))
form = UserForm()
return render_to_response('registration/regist.html', {'form':form },context_instance=RequestContext(request))
 

0 件のコメント:

コメントを投稿