如何将django-allauth中的所有视图重定向到主页/索引而不是/ accounts / *

时间:2014-11-12 14:19:28

标签: django django-authentication django-allauth

我在django项目中使用django-allauth进行用户身份验证。

我的问题是:如何更改django-allauth的默认网址,以便所有网址指向我的网站索引/主页?

我能够在索引上显示登录和注册表单,它们似乎工作正常。我想要的是,索引页面上的所有内容,而不是/ accounts / something。

因此,例如,当输入无效的登录详细信息时,它当前会重定向到/ accounts / login,我希望它重定向到主页并在其中显示任何错误消息。电子邮件确认,注册等同样如此。

在urls.py中使用RedirectView.as_view代替allauth似乎没有传递请求中的数据。

这是我的项目' urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'instapayback.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('main_site.urls')),
    url(r'^accounts/', include('allauth.urls')),
    # url(r'', include('social_auth.urls')),
)

我仍然是django的新手,所以请所有人尽可能地描述。谢谢

2 个答案:

答案 0 :(得分:3)

这就是我做到的。尚未完全测试,但似乎可以完成这项工作。

1)删除url(r'^accounts/', include('allauth.urls'))

来自你的urlpatterns的

(因为你将覆盖它)。

2)从allauth

复制url-pattern骨架

转到\site-packages\allauth\account\urls.py并复制您需要的网址。如果您使用社交媒体注册(Facebook等),您可能还想复制来自\site-packages\allauth\socialaccount\urls.py的网址

将模式粘贴到主urls.py.你的urls.py应该是这样的:

from allauth.account import views as allauth_views

urlpatterns = [
    ....

    url(r"^signup/$", allauth_views.signup, name="account_signup"),
    url(r"^login/$", allauth_views.login, name="account_login"),
    url(r"^logout/$", allauth_views.logout, name="account_logout"),

    url(r"^password/change/$", allauth_views.password_change,
        name="account_change_password"),
    url(r"^password/set/$", allauth_views.password_set, name="account_set_password"),

    url(r"^inactive/$", allauth_views.account_inactive, name="account_inactive"),

    # E-mail
    url(r"^email/$", allauth_views.email, name="account_email"),
    url(r"^confirm-email/$", allauth_views.email_verification_sent,
        name="account_email_verification_sent"),
    url(r"^confirm-email/(?P<key>[-:\w]+)/$", allauth_views.confirm_email,
        name="account_confirm_email"),

    # password reset
    url(r"^password/reset/$", allauth_views.password_reset,
        name="account_reset_password"),
    url(r"^password/reset/done/$", allauth_views.password_reset_done,
        name="account_reset_password_done"),
    url(r"^password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$",
        allauth_views.password_reset_from_key,
        name="account_reset_password_from_key"),
    url(r"^password/reset/key/done/$", allauth_views.password_reset_from_key_done,
        name="account_reset_password_from_key_done"),

    ....
]

3)使用模板中网址的&#34;名称&#34;

例如:对于&#39; login&#39;链接使用

<a href="{% url 'account_login' %}">Login</a>

我发现this文章也很有用(如何从外部Django应用覆盖视图)。

答案 1 :(得分:0)

在您的项目settings.py文件中,您可以通过将以下标志设置为您在webapp中想要的路径来覆盖该操作。

LOGIN_REDIRECT_URL 默认值:'/ accounts / profile /' 当contrib.auth.login视图没有下一个参数时,登录后重定向请求的URL。例如,login_required()装饰器使用此URL。

LOGIN_URL 默认值:'/ accounts / login /' 请求被重定向以进行登录的URL,尤其是在使用login_required()装饰器时。

您可以在Django docs中阅读有关它们的更多信息!