Как решить проблему ValueError в /register в django

Я пытаюсь создать регистрацию с помощью Django, но после заполнения формы я продолжаю получать это ValueError в /register как ошибку, требующую, чтобы имя пользователя было установлено. Я новичок в Django и, похоже, не понимаю, что от меня требуется. Ниже приведены мои коды для формы регистрации, views.py и возникающая ошибка соответственно

Форма подписки:

{% for message in messages %}
<h5>{{message}}</h5>
{% endfor %}
<form method="POST" action="register" name="registerForm">
    {% csrf_token %}
    <p>Username:</p>
    <input type="text" name="username "/>
    <p>Email:</p>
    <input type="email" name="email "/>
    <p>Password:</p>
    <input type="password" name="password"/>
    <p>Repeat Password:</p>
    <input type="password" name="confirm_password"/><br>
    <input type="submit"/>
</form>

views.py

def register(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        email = request.POST.get('email')
        password = request.POST.get('password')
        confirm_password = request.POST.get('confirm_password')
        
        if password==confirm_password:
            if User.objects.filter(username=username).exists():
                messages.info(request, 'Username Taken')
                return redirect('register')
            elif User.objects.filter(email=email).exists():
                messages.info(request, 'Email Taken')
                return redirect('register')
            else:
                user = User.objects.create_user(username=username, email=email, password=password)
                user.save()
                
                return redirect('/')
                
        else:
            messages.info(request, 'Password does not match')
            return redirect('register')
    else:
        return render(request, 'register.html')

Ошибка: ValueError at /register Должно быть установлено заданное имя пользователя Метод запроса: POST URL запроса: http://127.0.0.1:8000/register. Версия Django: 4.1.3 Тип исключения: ValueError Значение исключения:
Данное имя пользователя должно быть установлено Местоположение исключения: C:\Users\User\Envs\myapp\lib\site-packages\django\contrib\auth\models.py, line 144, in _create_user Поднято во время: myapp.views.register Python Executable: C:\Users\User\Envs\myapp\Scripts\python.exe Версия Python: 3.10.4 Python Path:
['C:\Users\User\Desktop\Python_journey\djangoTut\myproject', 'C:\Users\User\AppData\Local\Programs\Python\Python310\python310.zip', 'C:\Users\User\AppData\Local\Programs\Python\Python310\DLLs', 'C:\Users\User\AppData\Local\Programs\Python\Python310\lib', 'C:\Users\User\AppData\Local\Programs\Python\Python310', 'C:\Users\User\Envs\myapp', 'C:\Users\User\Envs\myapp\lib\site-packages']. Время сервера: Tue, 22 Nov 2022 07:17:35 +0000

Мне кажется, вы поступаете неправильно.

Изменить это:

action="register"

К этому:

action="{% url 'register' %}" #You need to write name of this register route.

ИЛИ

Просто вы можете попробовать этот способ:

action="/register/"

Проблема находится внутри вашего файла signup.html:

{% for message in messages %}
<h5>{{message}}</h5>
{% endfor %}
<form method="POST" action="/register/" name="registerForm">
    {% csrf_token %}
    <p>Username:</p>
    <input type="text" name="username "/>
    <!-- blank space in this input -->
    <p>Email:</p>
    <input type="email" name="email "/>
    <!-- blank space in this input -->
    <p>Password:</p>
    <input type="password" name="password"/>
    <p>Repeat Password:</p>
    <input type="password" name="confirm_password"/><br>
    <input type="submit"/>
</form>

Вы имеете пробелы внутри значения тега ввода "name". Поэтому эти значения не передаются вашему представлению внутри запроса, вместо них вы получаете значение None.

При попытке получить объект с этим значением возникает исключение.

User.objects.filter(username=username).exists()

Я хотел бы порекомендовать получать вашу модель с помощью try/except для обработки ошибок, или использовать ярлык Django get-object-or-404 перед проверкой ее существования.

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