首先,我是使用Django进行编程的新手。这就是我所拥有的:
register.html 模板中的<form>
:
<form method='POST' action='/accounts/register/'>
{% csrf_token %}
{% for field in form %}
{{ field.label_tag }}{{ field }} {{field.help_text}} {{field.errors}{}
<br/>
{% endfor %}
<input type='submit' value='Register' />
</form>
这是在我的 forms.py
中class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
first_name = forms.CharField(required = True)
last_name = forms.CharField(required = True)
password1 = forms.RegexField(widget=forms.PasswordInput,
regex = r'[\w+]{8,}',
label = 'New password',
help_text = "Must be strong!",
error_messages = {'required' : "ASDASDA",
'invalid' : "ZZZZZ"}
)
password2 = forms.RegexField(widget=forms.PasswordInput,
regex = r'[\w+]{8,}',
label = 'Re-enter password',
)
class Meta:
model = User
fields = ('last_name', 'first_name', 'username', 'email', 'password1', 'password2')
def save(self, commit = True):
user = super(MyRegistrationForm, self).save(commit = False)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
if commit:
user.save()
return user
这是在我的 views.py
中def User_Register_View(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
register_success = "Account successfuly created!"
return render(request,'index.html', locals())
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
return render(request,'accounts/register.html',args)
我的问题如下:
{{field.errors}}无效。没有错误打印。如果我将表单的所有字段都清空,并单击“注册”,则不会显示错误。
如果我在此论坛中添加另一个字段,“性别”作为CharField,是否会在我的数据库中为性别创建一个列? (我正在使用默认的sqlite3)
是否有一种简单的方法可以修改我的代码并使“用户”字段成为可选字段,而是将“电子邮件”字段设置为唯一且必需?
在我的代码所处的状态下,我在哪里可以检查数据库中我的电子邮件的唯一属性?它在我的views.py中,就在form.save()之前?
谢谢。如果您有任何问题,请告诉我
答案 0 :(得分:1)
def User_Register_View(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
register_success = "Account successfuly created!"
return render(request,'index.html', locals())
else:
form = MyRegistrationForm() # An unbound form
args = {}
args['form'] = form
return render(request,'accounts/register.html',args)
{{field.errors}}现在显示,因为如果验证失败,您不会返回经过验证的表单实例。您总是返回MyRegistrationForm的新实例。见上面的例子。
向表单添加字段不会影响您的数据库,因为只有模型映射到数据库表
&安培; 4.您需要自定义用户模型,请参阅here,了解如何操作