django - 检查用户名是否存在于数据库中
问题描述
好吧,我正在创建一个基于 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
解决方案
您只需要检查输入的用户名是否存在于数据库中。你可以用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
用户名检查,因为您已经提到
两个用户不能有相同的用户名
推荐阅读
- reactjs - Infowindow 每次都用数千个标记重新渲染整个谷歌地图
- docker - 我正在尝试在 ubuntu 容器上安装 gitlab 综合包
- javascript - 在 JavaScript append 中循环动态数据
- angular - 为什么在使用 ngFor 时将数组视为对象
- scala - Scala在Windows上执行命令
- java - 如何在 TextView 中显示 UUID?
- solr - 你知道如何设置 solr not present _"str" 吗?
- r - 如何根据 R 中的索引将列添加到数据框中?(见示例)
- tcp - 如何计算 TCP 的吞吐量?
- batch-file - 用于将文件夹从服务器复制到网络中的用户桌面的批处理脚本