2013-03-15 69 views
2

我创建了自己的类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 
+0

可以肯定的是:你是否改变了标准的url路由,使得si gnup视图实际上是使用你的注册视图而不是标准视图?我建议你在你的方法中加入一个断点('import pdb; pdb.set_trace()')来查看它是否被调用。如果它被调用,你可以遍历代码来查看出错的地方。我有兴趣听到结果... – pennersr 2013-03-18 11:50:56

+0

感谢您的回应pennersr。是的,我已经通过我的代码之前,我只是再次通过它。我的表单验证逻辑(上面)在allauth表单验证逻辑之前被调用。我的覆盖'LocalSignup.dispatch'函数也被调用(在'CloseableSignupMixin.dispatch'之后,'RedirectAuthenticatedUserMixin.dispatch'之后和'SignupView.dispatch'之后)。所以代码肯定是被调用的,但不管它是否仍然返回'LOGIN_REDIRECT_URL' HttpRedirectRepose,这是我无法想象的。再次感谢。 – 2013-03-19 19:10:36

+0

超级'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

回答

1

在默认视图中,如果登录窗体中有“下一个”字段,allauth会自动重定向到它。

<input id="login_redirect" type="hidden" name="next" value="#" /> 

完整的形式

 <form method="POST" action="{% url "account_login" %}"> 
     {% csrf_token %} 
     {{form}} 
     <input type="hidden" name="next" value="/add_account_select/" /> 
     <button type="submit" class="btn btn-primary">Sign IN</button> 
     </form> 
+0

完美运作 – KlausCPH 2016-04-11 12:44:47

0

只是提供一个向上的最新答案:

使用Django-allauth = 0.30.0,下面的作品起到了很好的views.py

from allauth.account.views import SignupView 


class LocaLSignupView(SignupView): 
    success_url = '/page/to/redirect/to'