我创建了自己的类LocalSignup,它使用我自己的窗体和我自己的验证逻辑扩展了基本django-allauth SignupView类。问题是,成功后,我无法将视图重定向到settings.py中的django LOGIN_REDIRECT_URL
。我在我的课堂观点中包含了一个success_url
字段;我试过覆盖get_success_url
函数(见下文);我也尝试通过使用LocalSignup.as_view(success_url="/add_account_select/")
传递我的成功重定向。没有工作。关于我在做什么的任何想法都是错误的?成功URL重定向不适用于django-allauth中的自定义视图
class LocalSignup(SignupView):
form_class = AllAuthUserForm
template_name = 'signup/social_login.html'
success_url = '/add_account_select/' #reverse_lazy('add_account_select')
def get_success_url(self):
return '/add_account_select/' #reverse('add_account_select')
def dispatch(self, request, *args, **kwargs):
# self.sociallogin = request.session.get('socialaccount_sociallogin')
return super(LocalSignup, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
ret = super(LocalSignup, self).form_valid(form)
### MY FORM VALIDATION LOGIC
return ret
def get_context_data(self, **kwargs):
ret = super(LocalSignup, self).get_context_data(**kwargs)
ret.update(dict(username=self.sociallogin.account.user.first_name,
photo_url=self.sociallogin.account.get_avatar_url()))
return ret
可以肯定的是:你是否改变了标准的url路由,使得si gnup视图实际上是使用你的注册视图而不是标准视图?我建议你在你的方法中加入一个断点('import pdb; pdb.set_trace()')来查看它是否被调用。如果它被调用,你可以遍历代码来查看出错的地方。我有兴趣听到结果... – pennersr 2013-03-18 11:50:56
感谢您的回应pennersr。是的,我已经通过我的代码之前,我只是再次通过它。我的表单验证逻辑(上面)在allauth表单验证逻辑之前被调用。我的覆盖'LocalSignup.dispatch'函数也被调用(在'CloseableSignupMixin.dispatch'之后,'RedirectAuthenticatedUserMixin.dispatch'之后和'SignupView.dispatch'之后)。所以代码肯定是被调用的,但不管它是否仍然返回'LOGIN_REDIRECT_URL' HttpRedirectRepose,这是我无法想象的。再次感谢。 – 2013-03-19 19:10:36
超级'form_valid'是使用成功URL的地方:https://github.com/pennersr/django-allauth/blob/36900f5d1741b00ea6d4e32530c645ebb6c1b9fe/allauth/account/views.py#L114正如你所看到的,成功的URL被检索(它应该调用你的方法),然后传递给'complete_signup',然后调用'perform_login'(https://github.com/pennersr/django-allauth/blob/36900f5d1741b00ea6d4e32530c645ebb6c1b9fe/allauth/account/utils.py# L80)。应始终传递您的网址,并最终将其用作重定向网址。添加打印或逐步确认。 – pennersr 2013-03-20 20:13:08