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
相关产品推荐
相关产品推荐

