跳到主要内容

构建用户模块:多角色登录与权限控制(Accounts)

在前面的章节中,我们已经完成了:

  • 班级管理
  • 老师管理
  • 学生管理
  • 成绩管理

到这里,一个校园管理系统的业务数据部分已经基本成型。

接下来,我们要做的是—— 让不同的人,用不同的身份,看到不同的内容。

这正是「用户模块」要解决的问题。

1.用户模块要解决什么问题?​

在我们的系统中,一共有 三类用户:

角色能做什么
管理员管理所有模块
老师管理学生与成绩
学生只能查看自己的成绩

因此,用户模块需要解决三件事:

  1. 登录(Login)
  2. 角色区分(Role)
  3. 权限控制(Permission)

本节课,我们先完成登录功能,权限控制会在后面单独讲。

2.为什么不用三套登录页面?​

一个很自然的问题是:

管理员、老师、学生, 登录方式都不一样, 为什么不用三套登录页面?

原因很简单:

  • 用户体验差
  • 维护成本高
  • 逻辑重复严重

所以我们的方案是:

一个登录页面 + 一个登录接口,根据角色动态处理

页面效果如下:

image-20260109093039508

3.URL 设计:统一入口​

首先,在全局 urls.py 中注册登录入口:

# 代码位置:config/urls.py
from accounts import views

urlpatterns = [
path('login/', views.user_login, name='user_login'),
]

这里我们刻意没有使用 login 这个名字,而是叫:user_login

原因是 Django 内置也有一个 login 方法,避免命名冲突,可以减少很多隐性 Bug。

4.登录页面设计(login.html)​

登录页面只有一个,但支持三种角色。

1️⃣ 角色选择​

# 代码位置: templates/accounts/login.html
<div class="input-group">
<label for="role">选择身份:</label>
<div class="radio-group">
<input type="radio" id="admin" name="role" value="admin">
<label for="admin">管理员</label>

<input type="radio" id="teacher" name="role" value="teacher">
<label for="teacher">老师</label>

<input type="radio" id="student" name="role" value="student">
<label for="student">学生</label>
</div>
</div>

所有 radio 使用 同一个 name,这样提交时后台只会收到一个 role。

2️⃣ 根据角色动态切换输入提示​

管理员登录用的是:

  • 用户名 + 密码

老师登录用的是:

  • 手机号 + 密码

学生登录用的是:

  • 学籍号 + 密码

但在 HTML 层面,我们只用一个 input:

<input type="text" name="username">

真正的区分逻辑,交给 JavaScript。

🔒 试读结束

继续阅读完整内容

以上为免费预览。前往「Django + Vue 全栈课程」,查看后续完整讲解、案例演示和配套资料。

查看课程详情