如何在Django中使用不同的表格注册不同类型的用户?

时间:2019-02-27 13:33:17

标签: python django

我是django的新手,我想为不同的用户使用不同的表格注册用户,例如学生,教学人员,非教学人员,3个表格。

该如何代替使用默认的auth_users表进行注册

3 个答案:

答案 0 :(得分:1)

在Django中,通常应该只有一个用户模型。这样,可以通过引用数据库中的同一组表来执行跨用户类型通用的功能(例如,登录和注销)。

如果要注册不同的用户类型,则有几种不同的选择。您可以扩展默认用户模型并创建具有唯一属性的子类(有关如何执行此操作的更多信息,请参见Django文档:https://docs.djangoproject.com/en/2.1/topics/auth/customizing/#extending-the-existing-user-model);或者,您可以创建自己的自定义用户模型,该模型具有一个将用户标记为“学生”,“教学人员”或“非教学人员”的开关(请参阅Django文档:https://docs.djangoproject.com/en/2.1/topics/auth/customizing/#substituting-a-custom-user-model)。或者,您也可以将用户添加到网上论坛,然后根据他们所在的网上论坛为他们赋予不同的权限。

这两种方法都可以使用,但是最终,所有用户模型都应该位于一个总体主类下。

答案 1 :(得分:0)

Django 身份验证中,可以使用Group模型,该模型与User模型具有多对多关系。您可以将studentsteaching staffnon teaching staff添加到Group模型中,以按类型区分users

答案 2 :(得分:0)

cf Sam为技术POV提供适当解决方案的答案。从设计POV来看,“学生”,“教学人员”等不是实体,而是用户可以具有的不同角色。

与生活者和现实生活中的事物有关的一个奇特之处是,它们往往会随着时间的推移而演变,而不会尊重我们定义明确的规格和分类-例如,学生也常常在学校担任教学职责在某些方面,教师还可以学习其他主题,或者教师停止教学并改用其他管理任务。如果您设计的模型具有不同的实体,而不是一个单一的实体和不同的角色,那么它就无法适当地适应这种情况(也不行,将一个帐户作为学生,一个帐户作为老师也不是正确的解决方案)。

这就是为什么Django中默认的用户模型基于一个单一实体(用户模型),并具有允许角色定义(组和权限)的功能,以使一个用户可以同时拥有多个角色,或者陆续。