如何使用 url 参数重定向登录用户?

A_K*_*A_K 5 python django django-urls django-views django-authentication

http://127.0.0.1:8000/在我的 Django 项目中,如果用户未登录,我试图将主页重定向到登录页面,但有一个已登录的用户我想http://127.0.0.1:8000/成为http://127.0.0.1:8000/username/

我尝试了不同的答案,但没有具体的答案:这是登录后的登录视图:

class LoginView(LoginView):
    template_name = 'login.html'

    def get_success_url(self):
        user=self.request.user.username
        return f'/{user}/'
Run Code Online (Sandbox Code Playgroud)

这是登录网址:

    path('accounts/login/', LoginView.as_view(redirect_authenticated_user=True,template_name='users/login.html'), name='login'),
Run Code Online (Sandbox Code Playgroud)

这是主页视图:

class home(LoginRequiredMixin, ListView):
    model = Item
    template_name = 'app/home.html'
    context_object_name = 'items'
Run Code Online (Sandbox Code Playgroud)

这是应用程序网址:

    path('<str:username>/', home.as_view(), name='home'),
Run Code Online (Sandbox Code Playgroud)

我的问题:

http://127.0.0.1:8000/username/如果用户已登录,则如何重定向主页login page

小智 5

您可以使用settings.LOGIN_URL等等settings.LOGIN_REDIRECT_URL:

class LoginView(LoginView):
    template_name = 'login.html'
    login_url='login'

    def get_success_url(self):
        user=self.request.user.username
        return reverse('home', args=(user))
Run Code Online (Sandbox Code Playgroud)

在设置.py中:

LOGIN_URL='some_app_name:login' #Redirect to login page if not logged in.

LOGIN_REDIRECT_URL='some_app_name:home' #Redirect to home page after successful login
Run Code Online (Sandbox Code Playgroud)

如果未在视图中指定,则默认为settings.pyLOGIN_URL和。LOGIN_REDIRECT_URL

Note:将视图与实际身份验证视图命名相同并不是一个好习惯,因此它应该是MyLoginView或者您可以提供的任何内容,而不是实际的视图名称。