Django Allauth 가입 양식 사용자 지정

6856 단어 pythondjangowebdev
더 많은 데이터 필드를 포함하도록 Django 가입 양식을 수정하고 싶을 때가 있습니다. 이 튜토리얼에는 비밀 요원을 위한 소셜 네트워크인 "SpyBook"이라는 가상의 앱이 있습니다. 출시 시 "스파이"와 "드라이버"의 두 가지 유형의 사용자만 있습니다. 사용자는 자신이 누구인지 선택할 수 있어야 합니다.

우리의 예제는 내 Cookiecutter Django 프로젝트의 코드를 기반으로 하지만 Django Allauth를 사용하는 모든 프로젝트에 이식할 수 있어야 합니다.

1단계: Django-Allauth에게 맞춤형 가입 양식을 사용하도록 지시


config/settings/base.py 의 맨 아래에 다음 코드 스니펫을 입력합니다.

# Control the forms that django-allauth uses
ACCOUNT_FORMS = {
    "login": "allauth.account.forms.LoginForm",
    "add_email": "allauth.account.forms.AddEmailForm",
    "change_password": "allauth.account.forms.ChangePasswordForm",
    "set_password": "allauth.account.forms.SetPasswordForm",
    "reset_password": "allauth.account.forms.ResetPasswordForm",
    "reset_password_from_key": "allauth.account.forms.ResetPasswordKeyForm",
    "disconnect": "allauth.socialaccount.forms.DisconnectForm",
    # Use our custom signup form
    "signup": "spybook.users.forms.SpyBookSignupForm",
}


2단계: Django 양식 가져오기


<yourprojectname>/users/forms.py에서 Cookiecutter Django는 django.contrib.auth.formsforms로 가져옵니다. 이것은 일반적으로 django.forms가 일반적으로 일반forms으로 가져오기 때문에 네임스페이스 문제입니다. 이 문제를 해결하기 위해 다른 네임스페이스에서 가져오기django.forms를 수행해 보겠습니다.

# Importing django.forms under a special namespace because of my old mistake
from django import forms as d_forms


3단계: django-allauth의 가입 양식 가져오기



해당 양식 가져오기 바로 아래에서 SignUpForm 가져오기:

from allauth.account.forms import SignupForm


4단계: 맞춤형 가입 양식 작성



긴 설명을 작성하는 대신 모든 코드 행에 주석을 달겠습니다.

# SpyBookSignupForm inherits from django-allauth's SignupForm
class SpyBookSignupForm(SignupForm):

    # Specify a choice field that matches the choice field on our user model
    type = d_forms.ChoiceField(choices=[("SPY", "Spy"), ("DRIVER", "Driver")])

    # Override the init method
    def __init__(self, *args, **kwargs):
        # Call the init of the parent class
        super().__init__(*args, **kwargs)
        # Remove autofocus because it is in the wrong place
        del self.fields["username"].widget.attrs["autofocus"]

    # Put in custom signup logic
    def custom_signup(self, request, user):
        # Set the user's type from the form reponse
        user.type = self.cleaned_data["type"]
        # Save the user's type to their database record
        user.save()


나는 이것을 내 라이브 스트림에 썼으며 내 채널과 twitch 채널에서 볼 수 있습니다. 나는 또한 이것이 어떻게 작동하는지에 대한 짧은 비디오 프레젠테이션을 만들 것입니다. 물론 이에 대한 코드는 GitHub 에서 찾을 수 있습니다.

모든 종류의 고급 트릭과 팁을 배우고 싶다면 Django Best Practices에서 내 아이스크림 테마bookcourse을 살펴보세요.

좋은 웹페이지 즐겨찾기