首页 > 解决方案 > 检查用户名是否存在于数据库中

问题描述

好吧,我正在创建一个基于 django 的网站,两个用户不能拥有相同的用户名。我想在注册期间检查用户名是否已经存在,然后在注册页面中返回一条消息以提醒该人

视图.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})

注册.html

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


Some help would be nice

标签: django

解决方案


您只需要检查输入的用户名是否存在于数据库中。你可以用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用户名检查,因为您已经提到

两个用户不能有相同的用户名


推荐阅读