Как предотвратить «нет имени пользователя» в django? - PullRequest
0 голосов
/ 02 мая 2020

Вот так выглядит моя форма регистрации:

Registration form

Я хочу сделать так, чтобы, если пользователь ничего не пишет в указанных текстовых полях, предупреждение всплывающий знак и говорит, что «имя пользователя должно быть введено» или что-то в этом роде

, но когда я нажимаю кнопку отправки, происходит ошибка значения, говоря, что «заданное имя пользователя должно быть установлено»

def register(request):

    context = {
        'error_message': None,
    }

    if request.method == 'POST':
        username = request.POST['username']
        password1 = request.POST['password1']
        password2 = request.POST['password2']
        email = request.POST['email']

        if password1==password2:
            if User.objects.filter(username=username).exists() or Person.objects.filter(username=username).exists():
                context['error_message'] = '이미 사용중인 아이디입니다.'
                return render(request, 'UserAdministration/register.html', context)
            elif User.objects.filter(email=email).exists() or Person.objects.filter(username=username).exists():
                context['error_message'] = '이미 사용중인 이메일입니다.'
                return render(request, 'UserAdministration/register.html ', context)
            else:
                user = User.objects.create_user(
                    password=password1,
                    email=email,
                    username=username
                    )
                user.save()

                masked_username = generate_masked_username.generate_masked_username(username)

                person = Person.objects.create(
                    username=username,
                    masked_username=masked_username,
                    email=email,
                    password=password1
                )
                person.save()

                return redirect('login')
        else:
            context['error_message'] = '비밀번호가 맞지 않습니다.'
            return render(request, 'UserAdministration/register.html', context)
        # return redirect('/')
        # originally was homepage.html. Doesn't know if this changed anything. just a note
    else:
        return render(request, 'UserAdministration/register.html', context)

Это мой код ... Кто-нибудь знает, как предотвратить эту ошибку?

1 Ответ

1 голос
/ 02 мая 2020

Это то, для чего формы . Вы должны использовать форму (или ModelForm), а не создавать форму и использовать request.POST вручную. Тогда вы получите лучшие ошибки. Эти документы будут особенно полезны.

Быстрый пример:

Форма:

from django import forms
from django.contrib.auth import get_user_model

class RegistrationForm(forms.ModelForm):
    class Meta:
        model = get_user_model()
        fields = ["username", "email", "password"]

Вид:

from django.urls import reverse_lazy
from django.views.generic.edit import CreateView
from .forms import RegistrationForm

class UserRegistrationView(CreateView):
    form_class = RegistrationForm
    template_name = "registration/register.html"
    success_url = reverse_lazy("login")

Это поможет вам пройти большую часть пути, вам просто нужно добавить настраиваемое поле и несколько логов c для проверки пароля2 и обработать все, что скрыто за именем пользователя.

Регистрация - это такой распространенный рабочий процесс тем не менее, вы также можете использовать пакет типа django -registration , чтобы обрабатывать детали для вас, и вы можете просто переопределить то, что вам нужно для вашего собственного логика c там, где это необходимо.

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