Python Django:检查用户是否存在,不显示validationerror
(在Django的新员工)我已经尝试了所有的方法,并且花了一整天的时间试图让它发挥作用。 我试图检查用户是否存在,如果已经存在,则显示ValidationError。现在,我正在使用views.py来显示一个模板,该模板显示帐户未创建,因为forms.py应该处理的验证错误未显示 forms.pyPython Django:检查用户是否存在,不显示validationerror,python,django,Python,Django,(在Django的新员工)我已经尝试了所有的方法,并且花了一整天的时间试图让它发挥作用。 我试图检查用户是否存在,如果已经存在,则显示ValidationError。现在,我正在使用views.py来显示一个模板,该模板显示帐户未创建,因为forms.py应该处理的验证错误未显示 forms.py from django.contrib.auth.models import User from django import forms class UserForm(forms.ModelFor
from django.contrib.auth.models import User
from django import forms
class UserForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
self.fields['email'].required = True
password = forms.CharField(widget=forms.PasswordInput)
def clean_username(self):
username = self.cleaned_data['username']
if User.objects.filter(username=username).exists():
raise forms.ValidationError("That user is already taken")
return username
class Meta:
model = User
fields = ['username', 'password', 'email']
labels = {
"email": "Email"
}
# including my login form too just in case
class LoginForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'password']
labels = {
"email": "Email"
}
views.py
from django.shortcuts import render, redirect
from .forms import UserForm
def index(request):
if request.user.is_authenticated:
return redirect('/myaccount')
else:
title = "welcome"
form = UserForm()
context = {
"template_title": title,
"form": form
}
return render(request, "index.html", context)
def new_user(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
email = form.cleaned_data.get("email")
form.save()
return render(request, "created.html")
return render(request, "notcreated.html")
在呈现
notcreated.html
模板时,需要包含表单错误。您将需要使用。该链接描述了form.errors
的格式。我可以使用notcreated.html来显示错误消息,但这会删除用户在表单中键入的所有内容,因此我现在只使用它作为替代。我试图在用户名处理到视图之前对其进行验证。py通常的做法是使用单个视图。在POST中,如果表单未能验证,则表单对象将传递回原始模板。表单对象包含用户以前的输入。例如,见:或。谢谢,我现在明白了。我想有一种方法可以单独使用forms.py,但我想如果没有先通过POST的信息,服务器将无法获取用户名。