You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中点击登录按钮后在URL传递用户ID并跳转对应仪表盘

Django实现登录后传递用户ID到URL并展示专属仪表盘

1. 配置URL路由

在项目的urls.py中添加登录和仪表盘的路由规则:

from django.urls import path
from django.contrib.auth import views as auth_views
from . import views

urlpatterns = [
    # 自定义登录视图
    path('login/', views.CustomLoginView.as_view(template_name='registration/login.html'), name='login'),
    # 带用户ID参数的仪表盘路由
    path('dashboard/<int:user_id>/', views.user_dashboard, name='user_dashboard'),
    # 登出路由(可选)
    path('logout/', auth_views.LogoutView.as_view(next_page='login'), name='logout'),
]

2. 自定义登录成功跳转逻辑

在views.py中创建自定义登录视图,重写跳转逻辑,确保登录后直接跳转到当前用户的专属仪表盘:

from django.contrib.auth.views import LoginView
from django.urls import reverse

class CustomLoginView(LoginView):
    def get_success_url(self):
        # 生成带当前用户ID的仪表盘URL
        return reverse('user_dashboard', kwargs={'user_id': self.request.user.id})

3. 编写仪表盘视图

函数式视图示例

from django.shortcuts import render, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseForbidden
from django.contrib.auth.models import User

@login_required
def user_dashboard(request, user_id):
    target_user = get_object_or_404(User, id=user_id)
    # 权限校验:仅当前登录用户能访问自己的仪表盘
    if request.user.id != user_id:
        return HttpResponseForbidden("无权访问此页面")
    # 这里添加仪表盘所需的数据处理逻辑
    context = {
        'current_user': target_user,
        # 其他业务数据...
    }
    return render(request, 'dashboard.html', context)

类式视图示例(更规范)

from django.views.generic import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.shortcuts import get_object_or_404
from django.contrib.auth.models import User

class DashboardView(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
    template_name = 'dashboard.html'

    def test_func(self):
        # 校验当前用户是否有权访问目标仪表盘
        return self.request.user.id == int(self.kwargs['user_id'])

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['current_user'] = get_object_or_404(User, id=self.kwargs['user_id'])
        # 添加其他业务数据
        return context

若使用类式视图,需将URL中的views.user_dashboard替换为views.DashboardView.as_view()。

4. 登录模板示例

在templates/registration/login.html中编写登录表单:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">登录</button>
</form>

关键注意事项

  • 权限控制:必须校验URL中的user_id与当前登录用户ID一致,避免用户通过修改URL访问他人仪表盘。
  • 登录校验:使用@login_required(函数式)或LoginRequiredMixin(类式)确保未登录用户无法直接访问仪表盘页面。

内容的提问来源于stack exchange,提问作者priya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:55:27