Django注册-错误消息未出现

时间:2020-09-22 17:33:30

标签: django

我尝试了解为什么模板上没有出现错误。 我正在使用带有支票(电子邮件和用户名)的经典注册。如果电子邮件已经存在=错误,并且用户名也相同。如果是关于密码(例如,密码不相同,...),则会出现错误,但对于电子邮件和用户名则什么也不会出现。

模板

<form method="post" class="user-log">
{% csrf_token %}
{% if form.errors %}
                                
                                        <div class="alert alert-warning alert-dismissible fade show" role="alert">
                                        Oupss <a data-toggle="collapse" href="#collapseExample" class="alert-link" style="text-decoration:none;">something wrong</a>!
                                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                            <span aria-hidden="true" style="color: #ffd14c;">&times;</span>
                                        </button>
                                        <div class="collapse" id="collapseExample">
                                            {% for field in form %}
                                            {% if field.errors %}
                                            <strong>{{ form.label }}</strong> {{ field.errors|striptags }}
                                            {% endif %}
                                            {% endfor %}
                                        </div>
                                        </div>

观看次数

def signup(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        # print(form.errors.as_data())
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            mail_subject = 'Activate your registration'
            message = render_to_string('user_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': default_token_generator.make_token(user),
            })
            to_email = form.cleaned_data.get('email')
            email = EmailMessage(
                mail_subject, message, to=[to_email]
            )
            email.send()
            return redirect ('user:user_registration_process')
    else:
        form = RegisterForm()
    return render(request, 'register.html', {'form': form})   

表格

class RegisterForm(UserCreationForm):
    username = forms.CharField(max_length=50)
    email = forms.EmailField(max_length=50)
    password1 = forms.CharField()
    password2 = forms.CharField()
    
    def clean(self):
       username = self.cleaned_data.get('username')
       if User.objects.filter(username=username).exists():
            raise forms.ValidationError("Ooops username already exists")
       email = self.cleaned_data.get('email')
       password1 = self.cleaned_data.get('password1')
       password1 = self.cleaned_data.get('password1')
       if User.objects.filter(email=email).exists():
            raise forms.ValidationError("Ooops email already exists")
       return self.cleaned_data

    class Meta(UserCreationForm):
        model = User
        fields = ('username','email','password1','password2')

1 个答案:

答案 0 :(得分:1)

您需要在super()

中调用 clean() 方法
class RegisterForm(UserCreationForm):
    username = forms.CharField(max_length=50)
    email = forms.EmailField(max_length=50)
    password1 = forms.CharField()
    password2 = forms.CharField()

    def clean(self):
        super().clean() # you should call the super method here

        username = self.cleaned_data.get('username')
        if User.objects.filter(username=username).exists():
            raise forms.ValidationError("Ooops username already exists")
        email = self.cleaned_data.get('email')
        password1 = self.cleaned_data.get('password1')
        password1 = self.cleaned_data.get('password1')
        if User.objects.filter(email=email).exists():
            raise forms.ValidationError("Ooops email already exists")
        return self.cleaned_data

    class Meta(UserCreationForm):
        model = User
        fields = ('username', 'email', 'password1', 'password2')
相关问题