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

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

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

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

    コード
    

    -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をブラウザに打ちます。

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

    signupの画面

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

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

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

    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の効率的なスキルアップに、
       是非お役立て下さい。