2013-03-15 72 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'