[英]How can i set unique mail registration in my Django project?
I was testing my registration view and i noticed that if i try to register using an alreaxy existing Username, i'll get an error; 我在测试注册视图时,发现如果尝试使用现有的Alreaxy用户名进行注册,则会出现错误; if i try to register using an already existing email, the app will let me do so. 如果我尝试使用现有的电子邮件进行注册,该应用程序将允许我进行注册。
Obviously, i don't want someone to register multiple accounts with the same email on my site. 显然,我不希望有人在我的网站上用同一封电子邮件注册多个帐户。 I'm fairly new to Django, and since i noticed that the form checked if an username already exists, i thought it would do the same with the email field. 我是Django的新手,并且由于我注意到该表单检查了用户名是否已存在,因此我认为它将对email字段执行相同的操作。
I don't really know how to go from that, should i work on my view or on the form? 我真的不知道该怎么做,我应该在我的观点还是在表格上? And how can i make it loop through my DB and find if an e-mail had already been registered? 我如何使其遍历数据库并查找是否已注册电子邮件? I thought email = form.cleaned_data.get('email')
would do the trick, but it didn't. 我以为email = form.cleaned_data.get('email')
可以解决这个问题,但事实并非如此。 Any help is appreciated. 任何帮助表示赞赏。
Here is my view: 这是我的看法:
def register(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
messages.success(request, f"New Account Created: {username}")
login(request, user)
messages.info(request, f"You are now logged in as {username}")
return redirect("main:homepage")
else:
for msg in form.error_messages:
messages.error(request, f"{msg}: {form.error_messages[msg]}")
form = NewUserForm
return render(request,
"main/register.html",
context={"form":form})
And here is the form: 形式如下:
class NewUserForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(NewUserForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
Compare the email address provided with email address in User model . 比较用户模型中提供的电子邮件地址和电子邮件地址。
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
if User.objects.filter(email__exact=email).count() == 0:
messages.success(request, f"New Account Created: {username}")
login(request, user)
messages.info(request, f"You are now logged in as {username}")
return redirect("main:homepage")
else:
return HttpResponse('This email address is already registered ')
我认为最好的选择是对自己的用户模型进行编程,这将使您对电子邮件添加一个唯一的限制,您可以查看一下文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.