django自定义注册视图,重定向失败

时间:2015-01-17 10:49:12

标签: python django http-redirect django-registration

我正在使用Django-registration,我已经将BaseRegistrationView子类化为自定义后端。

但是,当满足条件时,HttpResponseRedirect无法重定向到新页面。

代码如下:

class CustomRegistrationView(BaseRegistrationView):
  def register(self, request, **cleaned_data):
    captchaMatch = False

    #check captcha
    captchaValue = request.session.get('captcha')
    captchaValueSubmitted = cleaned_data['captcha'] + "123"

    if captchaValue != captchaValueSubmitted:
        return HttpResponseRedirect(reverse('InvitationRequired'))
    else:
        self.captchaMatch = True

    username, email, password = cleaned_data['username'], cleaned_data['email'], cleaned_data['password1']
    if Site._meta.installed:
        site = Site.objects.get_current()
    else:
        site = RequestSite(request)
    new_user = RegistrationProfile.objects.create_inactive_user(username, email,
                                                                password, site)


    signals.user_registered.send(sender=self.__class__,
                                 user=new_user,
                                 request=request)
    return new_user

def registration_allowed(self, request):
    """
    Indicate whether account registration is currently permitted,
    based on the value of the setting ``REGISTRATION_OPEN``. This
    is determined as follows:

    * If ``REGISTRATION_OPEN`` is not specified in settings, or is
      set to ``True``, registration is permitted.

    * If ``REGISTRATION_OPEN`` is both specified and set to
      ``False``, registration is not permitted.

    """
    return getattr(settings, 'REGISTRATION_OPEN', True)

def get_success_url(self, request, user):
    """
    Return the name of the URL to redirect to after successful
    user registration.

    """
    print "get successful url"
    if self.captchaMatch:
        return ('registration_complete', (), {})
    else:
        return HttpResponseRedirect(reverse('InvitationRequired'))

任何人都可以帮忙解释为什么重定向在函数寄存器中执行?

1 个答案:

答案 0 :(得分:0)

我想register方法应该返回用户或None。不是HttpRedirect对象。由于我不熟悉此特定应用,请尝试查看它们如何处理原始方法的失败并遵循该政策(例如,返回None或提出Exception)。

另外,基于对get_success_url()方法的评论,我希望代码是这样的:

def get_success_url(self, request, user):
  """
  Return the name of the URL to redirect to after successful
  user registration.
  """
  if self.captchaMatch:
     return ('registration_complete', (), {})
  else:
     return ('InvitationRequired', (), {})

我想你不应该返回一个HttpResponse实例,因为该方法用于获取要重定向的URL(而不是重定向本身)。