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

the*_*cks 4 python django

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

这个问题已被问过几次,但大多数都是旧的,并且使用静态 url,例如/accounts/profile/Django - 登录后,将用户重定向到他的自定义页面 --> mysite.com/username。我想使用动态 url 命名来实现此解决方案。

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

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

我将如何传递 args settings.pyfor LOGIN_REDIRECT_URL

Ala*_*air 7

这是不可能的使用动态参数(如登录的用户的主键)在LOGIN_REDIRECT_URL你的settings.py

在 Django 1.11+ 中,您可以子类化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})
Run Code Online (Sandbox Code Playgroud)

请注意,该url = self.get_redirect_url()行需要使用查询字符串处理重定向回上一页,例如?next=/foo/bar

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

url(r'^login/$', MyLoginView.as_view(), name='login'),
Run Code Online (Sandbox Code Playgroud)

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

一种解决方法是创建一个重定向到您的登录页面的视图:

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)
Run Code Online (Sandbox Code Playgroud)

为此视图创建一个 url 模式:

urlpatterns = [
    url(r'^account/$', account_redirect, name='account-redirect'),
]
Run Code Online (Sandbox Code Playgroud)

然后将该视图用作LOGIN_REDIRECT_URL

LOGIN_REDIRECT_URL = 'account-redirect'
Run Code Online (Sandbox Code Playgroud)