Django-自定义注册表(错误,唯一的电子邮件和管理员)



首先,我是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>

这在我的表单中。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

这在我的视图中。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)

我的问题如下:

  1. {{field.errors}}不工作。未打印任何错误。如果我让表单的所有字段都为空,然后单击"注册",则不会出现任何错误。

  2. 如果我在这个论坛中添加另一个字段,"gender"作为CharField,它会在我的DB中创建一个关于性别的列吗?(我正在使用默认的sqlite3)

  3. 有没有一种简单的方法可以修改我的代码,使"用户"字段可选,而使"电子邮件"字段是唯一的和必需的?

  4. 在我的代码所在的状态下,我在哪里可以在数据库中检查我的电子邮件的唯一属性?它在我的views.py中吗,就在form.save()之前?

谢谢。如果你有任何问题,请告诉我

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)
  1. {{field.errors}}现在显示,因为如果验证失败,则不会返回已验证的表单实例。您总是返回MyRegistrationForm的一个新实例。请参阅上面的示例。

  2. 向表单添加字段不会影响数据库,因为只有模型映射到数据库表

  3. &4.你需要自定义用户模型才能做到这一点,请参阅这里的示例,了解如何做到

相关内容

最新更新