【问题标题】:On Success URL redirect not working for custom view in django-allauth成功 URL 重定向不适用于 django-allauth 中的自定义视图
【发布时间】:2013-03-04 15:46:28
【问题描述】:

我创建了我自己的类 LocalSignup,它使用我自己的表单和我自己的验证逻辑扩展了基础 django-allauth SignupView 类。问题是,成功后,我无法将视图重定向到我的 settings.py 中的 django LOGIN_REDIRECT_URL 之外的任何内容。我在基于类的视图中包含了一个success_url 字段;我尝试过覆盖get_success_url 函数(见下文);我还尝试使用LocalSignup.as_view(success_url="/add_account_select/") 传递我的成功重定向。没有一个工作过。关于我做错了什么有什么想法吗?

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 路由以使注册视图实际上使用您的注册视图而不是标准的?我建议您在方法中放置一个断点 (import pdb; pdb.set_trace()) 以查看它是否被调用。如果它被调用,您可以单步执行代码以查看哪里出错了。我有兴趣听到结果...
  • 感谢 pennersr 的回复。是的,我之前已经遍历了我的代码,而我又一次遍历了它。我的表单验证逻辑(上图)在 allauth 表单验证逻辑之前调用。我重写的LocalSignup.dispatch 函数也被调用(在CloseableSignupMixin.dispatchRedirectAuthenticatedUserMixin.dispatch 之后和SignupView.dispatch 之后)。所以代码肯定被调用了,但无论如何它仍然返回LOGIN_REDIRECT_URL HttpRedirectRepose,我不太明白。再次感谢。
  • 超级form_valid 是使用成功URL 的地方:github.com/pennersr/django-allauth/blob/… 如您所见,成功的URL 被检索(它应该调用您的方法),然后传递给complete_signup,它反过来调用perform_login (github.com/pennersr/django-allauth/blob/…)。您的 URL 应该一直被传递,最终应该被用作重定向 URL。添加打印或逐步检查以确认这一点。
  • 谢谢 pennersr...我会逐步完成这个...非常感谢您的回复。

标签: django django-views django-allauth


【解决方案1】:

在默认视图中,如果登录表单视图中有“next”字段,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>

【讨论】:

    【解决方案2】:

    只是为了提供最新的答案:

    使用 django-allauth=0.30.0,以下在 views.py 中运行良好

    from allauth.account.views import SignupView
    
    
    class LocaLSignupView(SignupView):
        success_url = '/page/to/redirect/to'
    

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 1970-01-01
      • 2014-06-09
      • 2015-01-13
      • 2015-07-18
      • 2015-10-01
      • 2021-11-03
      • 2020-09-07
      • 2020-04-18
      相关资源
      最近更新 更多