Рубрики
Без рубрики

Настройка форм регистрации Django Allauth

Иногда вы хотите изменить формы регистрации Django, чтобы включить больше полей данных. В этом уроке я имею … Tagged с Django, Python, WebDev.

Иногда вы хотите изменить формы регистрации Django, чтобы включить больше полей данных. В этом уроке у меня есть вымышленное приложение под названием «Spybook», социальная сеть для секретных оперативников. При запуске есть только два типа пользователей: «Spy» и «Driver». Пользователи должны иметь возможность выбирать, какой из них они.

Наш пример будет создавать код из моего CookieCutter Django Проект, но должен быть переносным для любого проекта, используя 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",
}

В /Users/Forms.py , Cookiecutter django imports django.contrib.auth.forms как формы . Это проблема пространства имен, так как обычно django.forms обычно импортируется как простые формы Анкет Чтобы решить это, давайте просто импортируем django.forms Под другим пространством имен:

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

Прямо под этими формами импорта, получите Регистрация :

from allauth.account.forms import SignupForm

Вместо того, чтобы написать длинное объяснение, я просто прокомментирую каждую строку кода.

# 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()

Я написал это на своем живом потоке, который вы можете посмотреть на моем YouTube и Twitch каналы. Я также соберу короткую видео -презентацию того, как это работает. Конечно, код для этого можно найти на GitHub Анкет

Если вы хотите выучить все виды продвинутых трюков и советов, посмотрите на мою тематическую тематическую мороженое Книга и Курс На лучших практиках Джанго.

Оригинал: “https://dev.to/danielfeldroy/customizing-django-allauth-signup-forms-2o1m”