0

我正在尝试在注册期间实施电子邮件身份验证。但总是编译器返回无效的形式。谁能建议这背后的原因是什么?我正在为这个项目使用 SALEOR 包。下面我发布了模型、表单和视图代码

模型.py

class User(PermissionsMixin, AbstractBaseUser):
    email = models.EmailField(unique=True)
    addresses = models.ManyToManyField(Address, blank=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(default=timezone.now, editable=False)
    default_shipping_address = models.ForeignKey(
        Address, related_name='+', null=True, blank=True,
        on_delete=models.SET_NULL)
    default_billing_address = models.ForeignKey(
        Address, related_name='+', null=True, blank=True,
        on_delete=models.SET_NULL)

    USERNAME_FIELD = 'email'

    objects = UserManager()

表格.py

class SignupForm(forms.ModelForm):
    password = forms.CharField(
        widget=forms.PasswordInput)
    email = forms.EmailField(
        error_messages={
            'unique': pgettext_lazy(
                'Registration error',
                'This email has already been registered.')})

    class Meta:
        model = User
        fields = ('email',)
        labels = {
            'email': pgettext_lazy(
                'Email', 'Email'),
            'password': pgettext_lazy(
                'Password', 'Password')}

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self._meta.model.USERNAME_FIELD in self.fields:
            self.fields[self._meta.model.USERNAME_FIELD].widget.attrs.update(
                {'autofocus': ''})

    def save(self, request=None, commit=True):
        user = super().save(commit=False)
        password = self.cleaned_data['password']
        user.set_password(password)
        if commit:
            user.save()
        return user

views.py if form.is_valid 的 else 部分每次都被执行

def signup(request):

if request.method == 'POST':
    form = SignupForm(request.POST or None)
    print('POST Method')
    if form.is_valid():
        print('Valid Form')

        user = form.save(commit=False)
        user.is_active = False
        user.save()

        current_site = get_current_site(request)
        mail_subject = "Activate Your Account"
        message = render_to_string('account/activate.html', {
            'user': user,
            'domain': current_site.domain,
            'uid':force_text(urlsafe_base64_encode(user.pk)),

            'token':account_activation_token.make_token(user),
        })
        to_email = form.cleaned_data.get('email')
        from_email = settings.EMAIL_HOST_USER
        email = EmailMessage(
                    mail_subject, message,  to=[to_email]
        )
        email.send()
        print('Mail Sent')
        return HttpResponse('Please confirm your email address to complete the registration')
    else:
        form = SignupForm()
        print('else of form valid')
        return render(request, 'account/signup.html', {'form': form})
else:
    print('Not POST Method')
    form = SignupForm()
    return render(request,'account/signup.html',{'form':form})
4

0 回答 0