首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django forms.validation错误未显示

Django forms.validation错误未显示
EN

Stack Overflow用户
提问于 2020-01-29 23:43:07
回答 1查看 189关注 0票数 0

我试图使用内置于用户的djangos创建一个注册表单。我希望有一个密码字段,然后是第二个字段来验证密码匹配(请记住,这是一个新用户,所以数据库中还不存在密码)。我认为我非常接近,似乎我需要验证错误从表单传递到视图。表单只会清除我们的passwords...and,留下剩下的输入数据,但根本不会引发验证错误。任何想法和帮助都是非常感谢的!

表单

代码语言:javascript
运行
复制
class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())
    ver_password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': ' confirm password'}))
    ver_email = forms.EmailField(widget=forms.EmailInput(attrs={'placeholder': ' confirm email'}))

    class Meta():
        model = User
        fields = ('username',
                  'password',
                  'first_name',
                  'last_name',
                  'email')

    def clean(self):
        all_clean_data = super().clean()
        clean_email = all_clean_data['email']
        clean_ver_email = all_clean_data['ver_email']
        clean_password = all_clean_data['password']
        clean_ver_password = all_clean_data['ver_password']

        if clean_email != clean_ver_email:
            raise forms.ValidationError("Emails do not match")
        if clean_password != clean_ver_password:
            raise forms.ValidationError("Passwords do not match")

        return all_clean_data

视图

代码语言:javascript
运行
复制
def register(request):

    registered = False
    newregister = False

    if request.method == 'POST':
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileInfoForm(data=request.POST)

        if user_form.is_valid() and profile_form.is_valid():

            user = user_form.save()
            user.set_password(user.password)
            user.save(update_fields=['username','password','first_name','last_name','email'])

            profile = profile_form.save(commit=False)
            profile.user = user

            if 'profile_pic' in request.FILES:
                profile.profile_pic = request.FILES['profile_pic']

            profile.save()

            registered = True
            newregister = True
            return render(request, 'dai_members_app/login.html',
                                    {'user_form':user_form,
                                      'profile_form':profile_form,
                                      'registered':registered})
        else:
            print(user_form.errors,profile_form.errors)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-30 01:56:10

如果表单无效,则视图不会返回任何内容。它只在表单有效的情况下返回响应,这就是为什么“表单只是清除我们的passwords...and,留下其余的输入数据”。

其次,视图是不寻常的,因为表单视图通常同时处理GET请求(显示空白表单)和POST请求(验证和保存传入的数据)。除非您有充分的理由去做一些不同的事情,否则至少在学习基础知识时,您应该坚持使用标准Django模式。

请参见Django文档中的表单处理功能视图示例:https://docs.djangoproject.com/en/dev/topics/forms/#the-view

值得注意的是,Django已经为用户注册提供了一个表单:from django.contrib.auth.forms import UserCreationForm。你应该使用这个,而不是滚动你自己的,除非你需要做一些特别的事情,它看起来不像。

这里的教程也是一个很好的起点:https://simpleisbetterthancomplex.com/tutorial/2017/02/18/how-to-create-user-sign-up-view.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59977196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档