Проверьте, существует ли имя пользователя в базе данных - PullRequest
1 голос
/ 11 ноября 2019

Ну, я создаю сайт на основе Django, и два пользователя не могут иметь одно и то же имя пользователя. Я хочу проверить при регистрации, если имя пользователя уже существует, а затем вернуть сообщение на странице регистрации, чтобы предупредить человека

views.py

from .forms import UserRegisterForm
def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            email = form.cleaned_data.get('email')
            emails = User.objects.filter(is_active=True).values_list('email', flat=True)
            username = form.cleaned_data.get('username')
            names = User.objects.filter(is_active=True).values_list('username', flat=True)
           if username in names:
                messages.error(request, 'Sorry. This username is taken', extra_tags='name')
                return redirect('register')
            else:
                user.save()
                messages.success(request, "New account created")
                return redirect('login')
    else:
        form = UserRegisterForm()
    return render(request, 'user/register.html', {'form': form})

register.html

{% for message in messages %}
    <div class="alert alert-{{ message.tags }}">
        {{message}}
    </div>
{% endfor %} ```


Some help would be nice

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Добавьте подтверждение в форму, используя чистый метод ref .

0 голосов
/ 11 ноября 2019

Вам просто нужно проверить, существует ли введенное имя пользователя в базе данных. Вы можете проверить это с помощью метода exists().

def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            email = form.cleaned_data.get('email')
            emails = User.objects.filter(is_active=True).values_list('email', flat=True)
            username = form.cleaned_data.get('username')
            if User.objects.filter(username=username).exists():
                messages.error(request, 'Sorry. This username is taken', extra_tags='name')
                return redirect('register')
            else:
                user.save()
                messages.success(request, "New account created")
                return redirect('login')
    else:
        form = UserRegisterForm()
    return render(request, 'user/register.html', {'form': form})

Вам не нужно проверять is_active=True с проверкой имени пользователя, поскольку вы упомянули

два пользователя не могут иметь одно и то же имя пользователя

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