【问题标题】:Django CreateView ignoring get_success_urlDjango CreateView 忽略 get_success_url
【发布时间】:2020-08-09 05:06:38
【问题描述】:

除了忽略 get_success_url() 之外,我的以下视图有效。它将用户发送回表单的相同 url。用户已创建。视图类只是我在许多其他地方使用的扩展 createview,没有问题。

class SignUpView(BSModalCreateView):
    model = User
    form_class = SignUpForm
    success_message = 'Please check your email to complete the registration'
    template_name = 'form_modal.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['heading'] = 'Create ID'
        return context

    def form_valid(self, form):
        user = form.save(commit=False)
        user.is_active = False
        user.save()
        # current_site = get_current_site(request)
        current_site = '127.0.0.1:8000'
        mail_subject = 'Activate your account.'
        message = render_to_string('registration/confirm_email.html', {
            'user': user,
            # 'domain': current_site.domain,
            'domain': '127.0.0.1:8000',
            '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 HttpResponseRedirect(self.get_success_url())
    
    def get_success_url(self):
        return reverse('dashboard')

我尝试了很多不同的方法都无济于事,但希望其他人可以提供帮助。

【问题讨论】:

    标签: django django-forms django-views django-class-based-views


    【解决方案1】:

    我做了更多测试,BSModal 似乎是阻止这种情况的原因。我不知道为什么,但是在创建用户时发送一个信号会更容易和更清晰。我在用户模型上创建了一个名为 is_self_registered 的字段并添加了接收者:

    @receiver(post_save, sender=User)
    def send_activate_email(sender, instance, created, **kwargs):
        user = User.objects.get(pk=instance.id)
        if created and user.is_self_registered:
            print('do email thing')
    

    如果其中一位管理员创建了 ID,它将处于活动状态。如果使用自注册,则 id 无效。

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 2014-02-10
      • 1970-01-01
      • 2011-05-31
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多