python - 如何查看用户名是否已存在于 UserCreationField - Django
问题描述
我正在 Django 中为我的网站创建一个简单的注册字段。我想查看用户名是否已经存在,如果存在则显示错误。例如,如果我有一个用户名为hi的帐户,而另一个用户尝试创建一个用户名为hi的帐户,则在他们单击提交按钮后,我想引发错误。现在,如果我要使用已经存在的用户名创建一个帐户,Django 将不会创建该帐户但不会显示错误。我的代码在下面。
视图.py
def index(request,*args, **kwargs):
return render(request, "index.html", {} )
def register(request, ):
form = CreateUserForm()
if request.method == "POST":
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account has been successfully created, {username} ')
return redirect('login')
context = {'form': form}
return render(request, "register.html", context )
def login(request,):
return render(request,"login.html")
表格.py
class CreateUserForm(UserCreationForm):
username = forms.CharField(required=True, max_length=30, )
email = forms.EmailField(required=True)
first_name = forms.CharField(required=True, max_length=50)
last_name = forms.CharField(required=True, max_length=50)
class Meta:
model = User
fields = ['username', 'email', 'first_name', 'last_name', 'password1', 'password2',]
我不知道你是否需要这个,但这是我的 register.html:
<!--Might need to inherit from base.html-->
{% load crispy_forms_tags %}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:400,700">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="{% static "registerstyles.css" %}">
<title>GoodDeed - Register</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class="signup-form" style=" position:absolute; top: -1.5%; left: 38%;">
<form action="" method="post">
<h2 style=>Sign Up</h2>
<p style="font-size: xx-small; color: #f2f2f2;">---</p>
{% csrf_token %}
{{form|crispy}}
<button type="submit" class="btn btn-primary btn-lg">Sign Up</button>
<a href="/login" style="position: absolute; top: 90%; left: 50%; font-size: 16px !important;">Already a user? Sign in!</a>
</div>
</form>
<!--Sidebar bellow-->
</body>
</html>
感谢所有提供帮助的人!
***编辑
新 Forms.PY 代码***
class CreateUserForm(UserCreationForm):
username = forms.CharField(required=True, max_length=30, )
email = forms.EmailField(required=True)
first_name = forms.CharField(required=True, max_length=50)
last_name = forms.CharField(required=True, max_length=50)
class Meta:
model = User
fields = ['username', 'email', 'first_name', 'last_name', 'password1', 'password2',]
def clean(self):
cleaned_data=super.clean()
if User.objects.filter(username=cleaned_data["username"].exists():
raise ValidationError("The username is taken, please try another one")
解决方案
在您的表单中实现文档clean
中所示的功能
class CreateUserForm(UserCreationForm):
.....
def clean(self):
cleaned_data=super().clean()
if User.objects.filter(username=cleaned_data["username"].exists():
raise ValidationError("The username is taken, please try another one")
推荐阅读
- javascript - 在 d3 js 中选择绘图点
- reactjs - 将添加到日历 HOC 与自定义设计/材质 UI 相结合
- html - 如何在 URL 中隐藏父文件夹名称?
- android - 从 java 文件访问 AAR 文件的内容
- django - 具有非唯一名称的 Django 模型
- php - 如何在此代码中写入删除函数以删除其中的目录和文件?
- blazor - 如何通过 Blazor WebAssembly 写入浏览器控制台?
- scikit-learn - 如何在 scikit-learn 中为多类逻辑回归准备单热编码?
- flutter - 未处理的异常:类型 '_InternalLinkedHashMap
' 不是类型 'Iterable 的子类型 ' - ssl - 不使用 nginx 配置加载子域