我正在测试注册视图,我发现如果尝试使用现有的用户名进行注册,则会出现错误;如果我尝试使用现有的电子邮件进行注册,该应用程序将允许我进行注册。
很显然,我不希望有人在我的网站上用同一封电子邮件注册多个帐户。我是Django的新手,并且由于我注意到该表单检查了用户名是否已存在,因此我认为它将对电子邮件字段执行相同的操作。
我真的不知道该怎么做,我应该按自己的观点还是按照表格进行工作?我如何使其遍历数据库并查找是否已注册电子邮件?我以为const input = {"concepts":[{"id_cpt":"1","fr_cpt":"Proche",},{"id_cpt":"2","fr_cpt":"Loin",},{"id_cpt":"3","fr_cpt":"Here",},],"arcs":[{"idfrom":"1","idto":"2"},{"idfrom":"3","idto":"2"},]}
let nodes = [],
links = [],
map = {};
for (const { id_cpt, fr_cpt } of input.concepts) {
nodes.push({ id: fr_cpt });
map[id_cpt] = fr_cpt
}
for (const { idfrom, idto } of input.arcs) {
links.push({ source: map[idfrom], target: map[idto] }) // get the value using map
}
const output = { nodes, links }
console.log(output)
可以解决这个问题,但事实并非如此。
任何帮助表示赞赏。
这是我的观点:
email = form.cleaned_data.get('email')
这是表格:
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})
答案 0 :(得分:2)
根据您的代码,所有您需要做的就是从表单中产生一个 ValidationError
class NewUserForm(UserCreationForm):
email = forms.EmailField(required=True)
def clean_email(self):
if User.objects.filter(email=self.cleaned_data['email']).exists():
raise forms.ValidationError("the given email is already registered")
return self.cleaned_data['email']
class Meta:
model = User
fields = ("username", "email", "password1", "password2")