Django - 登录并重定向到用户个人资料页面

时间:2016-03-18 19:26:09

标签: python django

我正在尝试将刚刚登录的用户重定向到他/她各自的帐户页面。

这个问题已被问过几次,但其中大部分都是陈旧的并使用静态网址,例如/accounts/profile/Django - after login, redirect user to his custom page --> mysite.com/username。我想使用动态URL命名来实现此解决方案。

例如,如果我的帐户登录页面具有以下网址格式,该怎么办?

url(r'^account/(?P<pk>\d+)/(?P<name>\w+)/$', AccountLanding.as_view(), name="account-landing" )`.

我如何传递settings.py LOGIN_REDIRECT_URL中的参数?

1 个答案:

答案 0 :(得分:4)

无法在LOGIN_REDIRECT_URL的{​​{1}}中使用动态参数(例如,已登录用户的主键)。

在Django 1.11+中,您可以继承settings.py,并覆盖LoginView,以便动态重定向。

get_success_url

请注意,使用查询字符串处理重定向回到上一页需要from django.contrib.auth.views import LoginView class MyLoginView(): def get_success_url(self): url = self.get_redirect_url() return url or reverse('account_landing', kwargs={'pk': self.request.user.pk, 'name': self.request.user.username}) 行,例如url = self.get_redirect_url()

然后在URL配置中使用自定义登录视图。

?next=/foo/bar

对于早期版本的Django,无法以相同的方式自定义基于函数的日志视图。

一种解决方法是创建一个重定向到目标网页的视图:

url(r'^login/$', MyLoginView.as_view(), name='login'),

为此视图创建网址格式:

from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect

@login_required
def account_redirect(request):
    return redirect('account-landing', pk=request.user.pk, name=request.user.username)

然后将该视图用作urlpatterns = [ url(r'^account/$', account_redirect, name='account-redirect'), ]

LOGIN_REDIRECT_URL