Как ограничить создание учетной записи пользователя Django заданными именами пользователей / адресами / практическими значениями?

Мы настроили создание учетной записи пользователя Django / вход в систему с помощью этого руководства , и мы ограничили контент только для авторизованных пользователей с помощью {% if user.is_authenticated %} и if request.user.is_authenticated. Все работает отлично. Но по-прежнему ничто не мешает любому зайти на сайт и зарегистрировать учетную запись, указав любое значение имени пользователя / адреса электронной почты / пароля.

Мы хотим ограничить создание учетных записей пользователей определенными именами пользователей / электронной почтой / IP-адресами / любым практическим значением. Можем ли мы проверить, находится ли значение в каком-то белом списке, вставив куда-нибудь что-то вроде if email in ['whitelistedemail@example.com']:? Что-то, что посылает по электронной почте пригласительную ссылку?

Мы нашли документацию по разрешениям и авторизации и много вопросов SO по настройке функциональности для типов пользователей, но мы не смогли найти ничего по ограничению создания учетной записи, так что, возможно, мы что-то упускаем.

Мы могли бы начать создавать различные типы пользователей, но мы опасаемся забегать вперед, пытаясь найти более сложное решение до того, как разберемся с этим основным шагом. Правильно ли мы поступаем?

Добрый день, существует множество способов добиться того, о чем вы спрашиваете. Простым приемом может быть использование validators.

Поскольку учебник, которому вы следовали, не погружался в детали, вам придется сделать дополнительные шаги.

Я не знаю структуру вашего проекта, поэтому предполагаю, что вы знаете основы django.

Создайте пользовательский валидатор

В файл с именем validators.py добавьте следующее (c.f django EmailValidator) :

from django.core.validators import EmailValidator
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _

EMAIL_LIST = []

validate_email = EmailValidator(allowlist=EMAIL_PATTERN)

Измените EMAIL_PATTERN по своему усмотрению.

Создайте пользовательскую форму

В файле с именем forms.py добавьте что-то следующее :

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _

from validators import validate_email


class CustomUserCreationForm(UserCreationForm):

    email = forms.EmailField(label=_("Email"), validators=[validate_email])

    class Meta:
        model = User
        fields = [
            "username",
            "email",
            "password1",
            "password2",
        ]

Создайте пользовательское представление регистрации

В вашем views.py

from django.urls import reverse_lazy
from django.views.generic import CreateView
from forms import CustomUserCreationForm

class SignupView(CreateView):
    form_class = CustomUserCreationForm
    template_name = "the-place-of-your/registration-template.html"
    success_url = reverse_lazy("you-custom-success-url-name")

Вам придется создать пользовательский шаблон.

Редактируйте свои урлы

urlpatterns = [
    ...
    path("", include("django.contrib.auth.urls")),
    path("signup/", SignupView.as_view(), name="signup"),
    ...
]

Моя скромная демонстрация - это способ достижения ограничения на проверку электронной почты с помощью allowlist arg. Существует множество других способов сделать это.

Вернуться на верх