如何在没有模型的 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 表单中设置空白=假的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 会话模型中设置自定义字段?

如何在 Django 表单输入字段中设置事件处理程序

如何在 django 表单声明中设置标签的 css 类?

如何在 django 表单中设置自定义 HTML 属性?

如何在反应式表单中设置模型数据,Angular 9

Django 在表单中设置初始数据