Django 帮我提出验证错误
Django help me raise validation error
我试图在有人输入已被占用的用户名时发出某种警告。但是,我所能做的就是重定向到静态页面,上面写着:用户名选择或密码不匹配。
这是我在 views.py 中写的:
def register_user(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
return render_to_response('invalid_reg.html')
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
print args
return render_to_response('register.html', args)
这是我的 forms.py:
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
def save(self, commit=True):
user = super(MyRegistrationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
我完全不知道如何向用户发出适当的警告。
如何在此处实现某种验证错误警告?
您可以将 clean_
方法添加到表单 class 以验证用户名字段:
def clean_username(self):
username = self.cleaned_data.get('username')
if username:
user = User.objects.filter(username=username)
if user.exists():
raise forms.ValidationError(
_('That username exists in our system. Please try another.'),
code='unique_username'
)
return username
之后您应该重写您的视图函数以将表单对象传递给注册模板:
def register_user(request):
args = {}
args.update(csrf(request))
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
args['form'] = form
return render_to_response('register.html', args)
args['form'] = MyRegistrationForm()
print args
return render_to_response('register.html', args)
我建议您自己了解如何在模板中显示错误消息。
Django 文档中的这些页面应该提供更多见解:
我试图在有人输入已被占用的用户名时发出某种警告。但是,我所能做的就是重定向到静态页面,上面写着:用户名选择或密码不匹配。
这是我在 views.py 中写的:
def register_user(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
return render_to_response('invalid_reg.html')
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
print args
return render_to_response('register.html', args)
这是我的 forms.py:
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
def save(self, commit=True):
user = super(MyRegistrationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
我完全不知道如何向用户发出适当的警告。
如何在此处实现某种验证错误警告?
您可以将 clean_
方法添加到表单 class 以验证用户名字段:
def clean_username(self):
username = self.cleaned_data.get('username')
if username:
user = User.objects.filter(username=username)
if user.exists():
raise forms.ValidationError(
_('That username exists in our system. Please try another.'),
code='unique_username'
)
return username
之后您应该重写您的视图函数以将表单对象传递给注册模板:
def register_user(request):
args = {}
args.update(csrf(request))
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
args['form'] = form
return render_to_response('register.html', args)
args['form'] = MyRegistrationForm()
print args
return render_to_response('register.html', args)
我建议您自己了解如何在模板中显示错误消息。
Django 文档中的这些页面应该提供更多见解: