カスタマイズしたユーザー登録フォームの実装

前回の記事では、カスタマイズされたユーザーモデルを作っていきました。

ここからは、カスタマイズされたユーザーモデルをもとに、ユーザー登録をするためのページを作っていきましょう。

まずは、ユーザー登録をするためのフォームを作っていきます。

[コード]

-BASE/login/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm ← new!
from .models import NewUser
class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = NewUser
        field = ('username', 'age')

ちなみに、field = ('username', 'age')の部分については、field = UserCreationForm.Meta.fields + ('age', )

という表現にすることも可能です。

UserCreationForm.Meta.Fieldsというのは、デフォルトで準備されているUserモデル内のフィールド(username、emailなど)のことを示しています。

これに'age'を追加しているので、デフォルトのユーザーテーブルにageが追加されます。
htmlファイルの作成

次に、ログインページを作っていきましょう。


[コマンドライン]

 BASE/templates
$ touch signup.html

htmlファイルにコードを書いていきましょう。


[コード]

-BASE/templates/signup.html
<form method = "post">
{% csrf_token %}
{{ form.as_p }}
</form>

htmlファイルの作成が完了しました。あとは、views.pyファイルでこのsignup.htmlファイルに表示する内容をコントロールし、viewとurlを関連付ければ設定が完了します。

まずは、views.pyの設定をしていきましょう。



[コード]

-BASE/login/views.py
from django.views.generic import CreateView
from .forms import CustomUserCreationForm
from django.urls import reverse_lazy
class LoginView(CreateView):
    template_name = 'new.html'
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('complete')

ここでやっていることは今まで学んだ内容と同じです。

ここで、success_urlのところで、'complete'を呼び出すように設定しました。

signupが完了したら表示させる内容をコントロールするためです。

今回は、function based viewを使ってコントロールしていきます。



[コード]

-BASE/login/views.py
from dango.http import HttpResponse
def signupcomplete(request):
 return HttpResponse("<p>sign upが完了しました。</p>")

これはhello worldアプリの所で実装した内容ですので、詳しい説明は省略します。

簡単に説明すると、signupメソッドが呼び出されると、signupが完了しましたという内容のresponseがブラウザに返されるように設定しています。

最後に、urls.pyファイルを編集していきましょう。

 

[コード]

-BASE/login/urls.py
from django.urls import path
from .views import LoginView, signupcomplete
urlpatterns = [
    path('signup/', SignupView.as_view(), name='signup'),
    path('complete/', signupcomplete, name='complete'),
]

これで、superuserを作ったうえでサーバーを立ち上げていきましょう。


[コマンドライン]

BASE
$ python manage.py createsuperuser
$ python manage.py runserver

サーバーを立ち上げた上で、localhost:8000/login/signupをブラウザに打ちます。

すると、このような画面がでました。

forms.pyファイルで設定したusernameとageのフィールドが表示されていることがわかります。

(passwordとpassword confirmationは必ず表示されます。)

ここに実際に情報を書き込み、signupボタンを押してみます。

すると、urlはlocalhost:8000/login/completeと変わり、「sign upが完了しました。」
という画面が表示されていることがわかります。

また、localhost:8000/adminで管理画面にログインすると、signupページで追加したユーザーの情報がしっかりと追加されていることも確認できます。

次は、ユーザー管理画面でカスタムユーザーモデルを使う場合についてみていきましょう。

~Django無料講義~のご案内

Code for Djangoが、4時間超の無料Django講義をはじめました
 
・本を出版したCode for Djangoの
 製作者が作ったサイトです。

・Code for Djangoの内容も、
 動画で詳しく解説しています。
 
・動画は順次ふやしていきますので、
 ただで学び続けることが可能です。
 
・Djangoの効率的なスキルアップに、
 是非お役立て下さい。

                                                                 Django講義はこちら
Created with