如何在没有模型的 Django 表单中设置空白=假
Posted
技术标签:
【中文标题】如何在没有模型的 Django 表单中设置空白=假【英文标题】:How to set blank=False in Django form without a Model 【发布时间】:2017-02-24 13:55:05 【问题描述】:我通过在没有数据库模型的情况下扩展 forms.Form 制作了一个 Django 表单。如何在 CharField 上设置 blank=False 以便 Django 验证检查该字段是否为空?
编辑: 在views.py中
def login(request):
if request.method=='POST':
#####
#####
else:
form=LoginForm()
buttontext='Login'
return render(request,'index.html','buttontext':buttontext,'form':form)
在forms.py中:
class LoginForm(forms.Form):
username=forms.CharField(label="Username",max_length=30,blank=False)
password=forms.CharField(label="Password",widget=forms.PasswordInput(),blank=False)
class Meta:
help_texts='username':None,
def clean(self):
self.cleaned_data=super(LoginForm,self).clean()
u=self.cleaned_data['username']
try:
us=Account.objects.all().get(username=u)
p=self.cleaned_data['password']
print 'original:', us.password
print 'got:', p
if p!=us.password:
add_error('password','Incorrect password')
except Account.DoesNotExist:
self.add_error('username','Username does not exist!')
return self.cleaned_data
【问题讨论】:
为了清楚起见,请分享您的 forms.py 和 views.py 代码。 我真的希望您不要在此处以纯文本形式存储密码。立即删除所有这些代码并使用内置的 Django 身份验证系统。 @DanielRoseman 我知道密码不应以纯文本形式保存,而是经过哈希处理。但这只是一个测试项目。我只是在学习django。我还没有被分配任何生产级项目。我真的要学会使用内置的auth库 【参考方案1】:使用 required=True 而不是 blank=False
例如:
username=forms.CharField(label="Username",max_length=30,required=True)
在 Django 中,模型中的 blank=False 与表单中的 required=True 相关。
【讨论】:
【参考方案2】:我将在上面指出@Daniel Roseman 的评论-不要使用此表单来保存密码,至少not how you're doing it。但是对于 其他 表单:您需要 required
,而不是 blank
。空白用于模型,required is for forms。
class LoginForm(forms.Form):
username=forms.CharField(label="Username",max_length=30,required=False)
password=forms.CharField(label="Password",widget=forms.PasswordInput(),required=False)
【讨论】:
感谢您的回答。这只是一个测试项目。我知道密码应该存储为散列值。我必须学习 djabgo 的内置 auth 包。以上是关于如何在没有模型的 Django 表单中设置空白=假的主要内容,如果未能解决你的问题,请参考以下文章