使用django.contrib.auth.models导入用户时,是否需要在models.py中创建单独的类?

时间:2012-03-05 22:23:33

标签: python django

import语句导入所需的部分。但是当你将它放入已安装的应用程序时,是否已经制作了“用户”类?或者你是否还需要在models.py中澄清以便在db中创建表?或者有人可以扩展如何使用django用户和会话?我现在正在查看django文档,他们都只是讨论了如何使用这个东西一次。他们从不将代码放在一个语法中,用户将通过浏览器使用代码,而不是通过python shell。

4 个答案:

答案 0 :(得分:0)

所有已安装的应用都可以为数据库架构做出贡献。 django.contrib.auth.models贡献了auth_user模型背后的django.contrib.auth.models.User表,因此除非您有特定的理由,否则您不必担心重新创建它。

答案 1 :(得分:0)

这里有很多事情要发生。如您所知,Django附带了许多可以在您的应用中使用的“contrib”软件包。您可以通过将它们放入INSTALLED_APPS

来“激活”这些内容

运行python manage.py syncdb时,Django会解析INSTALLED_APPS中每个应用程序的models.py文件,并在数据库中创建关联的表。因此,一旦您将django.contrib.auth添加到INSTALLED_APPS并运行syncdbUserGroup的表就会存在并准备好使用。

现在,如果您想在其他应用中使用这些模型,您可以像from django.contrib.auth.models import User那样导入它们。然后,您可以在其中一个模型上为ForeignKey模型创建OneToOneFieldManyToManyFieldUser。执行此操作时,不会创建任何表(ManyToManyField除外;稍微多一点)。同一个表总是用于User,就像您可能在其中建立关系的任何自有模型一样。

ManyToManyField略有不同,因为创建了一个中间表(通常称为“连接表”),它将关系的两端链接在一起。但是,这纯粹是出于某一特定关系的目的 - 实际User表的任何内容都不同或以任何方式改变。

重点是为User创建了一个表,无论创建它们的上下文如何,这个表都用于存储所有User。您可以将User导入您可以根据需要创建任意数量的所有应用,并根据User进行任何真正的更改。

答案 2 :(得分:0)

如果表名或其他内容不符合您的需求,您可以随时扩展用户模型。

from django.contrib.auth.models import User

class Employee(User):
    ...

答案 3 :(得分:0)

Model中扩展models.py类的任何类都有助于数据库架构。这意味着,django会搜索您的(以及django核心)model.py文件并查找任何扩展Model的类,如:

some models.py

class SomeModel(Model):
    ...
    ...

class Otherthing(Model):
    ...

这也适用于django核心代码文件。由于使用应用程序标签和模型名称命名的所有数据库表,由django创建的数据库ables也具有...

例如,

from django.contrib.auth.models import User

如果您跟踪文件层次结构django -> contrib -> auth并打开models.py文件,您将看到相关模型。此处还有其他模型类,如PermissionGroup模型。

由于这些模型位于auth应用程序下,因此数据库表为auth_userauth_perissionauth_group

第一次运行manage.py syncdb命令时,django会创建这些表...