教师vs学生注册流程全拆解:django-multiple-user-types-example双用户类型注册表单实现教程 教师vs学生注册流程全拆解django-multiple-user-types-example双用户类型注册表单实现教程【免费下载链接】django-multiple-user-types-exampleDjango Quiz Application项目地址: https://gitcode.com/gh_mirrors/dj/django-multiple-user-types-example本文带你完整拆解django-multiple-user-types-example一个 Django Quiz Application 示例项目中教师与学生双用户类型注册表单的实现。你只需跟着本文走一遍就能理解 Django 多用户类型注册的核心套路自定义 User 模型、两个注册表单、身份校验装饰器最后 4 个命令在本地跑起来 。1. 为什么多用户类型总让新手卡住Django 自带的认证系统里只有一种用户。但现实场景中同一个网站往往有多种角色‍教师创建测验Quiz、添加题目、查看成绩‍学生选择感兴趣的科目、作答测验、查看历史成绩本项目的解法非常朴素在自定义的User模型上加两个布尔字段is_student和is_teacher注册时由不同的表单负责把它们置为True。模型定义在 django_school/classroom/models.py 中学生还通过一个一对一的Student扩展模型关联感兴趣的科目这是后面注册流程差异的根源。2. 注册流程全拆解从选择身份到自动登录2.1 统一入口一个页面两条注册路径访问accounts/signup/时用户先看到一个身份选择页模板 django_school/templates/registration/signup.html页面上有两个大按钮Im a student和Im a teacher分别跳转到两条独立路由accounts/signup/student/→StudentSignUpViewaccounts/signup/teacher/→TeacherSignUpView路由注册在 django_school/django_school/urls.py。这种一个入口页 多个具体注册视图的结构是双用户类型注册表单最常见的落地方式。2.2 教师注册最简配置保存即完成教师表单TeacherSignUpForm定义在 django_school/classroom/forms.py逻辑极其轻量继承 Django 内置的UserCreationForm自带用户名、密码、密码确认三项校验重写save()先把commitFalse存下来再设置user.is_teacher True最后保存视图TeacherSignUpView位于 django_school/classroom/views/teachers.py在表单合法后调用login()自动登录并跳转到教师管理页teachers:quiz_change_list。用户全程零额外操作。2.3 学生注册多一个兴趣科目选择 事务保护学生表单StudentSignUpForm与教师版有三个关键差异这也是全文最值得学的部分多一个必填字段interests使用ModelMultipleChoiceFieldCheckboxSelectMultiple渲染成复选框组数据源是Subject.objects.all()注册时必须勾选感兴趣的科目一次保存两条记录save()里先创建User置is_student True紧接着创建一对一的Student记录并批量写入兴趣科目transaction.atomic装饰器保证建用户 建 Student 写兴趣三步要么全成功、要么全回滚避免出现用户注册成功但 Student 记录缺失的脏数据视图StudentSignUpViewdjango_school/classroom/views/students.py同样自动登录但跳转到students:quiz_list——登录后立刻按身份分流教师进后台、学生进测验列表。 模板层面两种表单共用同一个registration/signup_form.html视图通过get_context_data注入不同的user_typestudent/teacher页面标题就能动态显示 Sign up as a student/teacher一套模板服务两种角色。3. 注册之后身份校验装饰器如何兜底注册只是把字段写上真正的门禁靠装饰器。django_school/classroom/decorators.py 基于 Django 内置的user_passes_test封装了两个装饰器装饰器校验条件不通过时student_requiredu.is_active and u.is_student重定向到登录页teacher_requiredu.is_active and u.is_teacher重定向到登录页所有学生视图测验列表、答题、兴趣设置和教师视图创建/编辑/删除测验都叠加了login_required 对应装饰器。即使有人手动改库把身份字段改错也无法越权访问这是多用户类型项目最关键的防线。4. 本地快速运行4 个命令跑起来git clone https://gitcode.com/gh_mirrors/dj/django-multiple-user-types-example pip install -r requirements.txt python manage.py migrate python manage.py runserver打开127.0.0.1:8000依次体验选择身份 → 教师/学生表单 → 自动登录 → 分流向导的完整闭环对照本文流程复盘会事半功倍 ✅。依赖清单见 requirements.txt。5. 小结把这套模式带到你自己的项目本文拆解的双用户类型注册表单核心可复用技巧只有 3 条模型层AbstractUser加布尔字段标识角色扩展数据用一对一模型承接表单层每个角色一个UserCreationForm子类在save()里设置身份并落库多步写入务必加transaction.atomic视图层统一入口页分流到各自注册视图注册后自动登录 按身份重定向再用user_passes_test装饰器守住业务视图理解了 django-multiple-user-types-example 的这套注册表单实现你以后做商家/买家导师/学员等多角色注册时基本可以直接套用这套结构。【免费下载链接】django-multiple-user-types-exampleDjango Quiz Application项目地址: https://gitcode.com/gh_mirrors/dj/django-multiple-user-types-example创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考