📜  如何在 Django 中使用用户模型?

📅  最后修改于: 2022-05-13 01:54:34.644000             🧑  作者: Mango

如何在 Django 中使用用户模型?

Django 的内置身份验证系统很棒。在大多数情况下,我们可以开箱即用地使用它,从而节省了大量的开发和测试工作。它适合大多数用例并且非常安全。但有时我们需要做一些微调以适应我们的 Web 应用程序。通常我们想要存储更多与我们的用户相关的数据,但下一个问题可能是 Django 开发人员应该如何引用用户? Django 官方文档列出了三种不同的方式:

  • 用户
  • AUTH_USER_MODEL
  • get_user_model()

解释:

通过示例说明如何引用用户模型。考虑一个名为mysite的项目,它有一个应用程序名称blog

方法 1 – 直接用户模型:

在 models.py 中添加以下代码:

Python3
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    content= models.TextField()
    def __str__(self):
        return self.title


Python3
# blog/models.py
from django.conf import settings
from django.db import models
  
class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    content = models.TextField()


Python3
from django.db import models
from django.contrib.auth import get_user_model
User=get_user_model()
# Create your models here.
class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    content= models.TextField()
    def __str__(self):
        return self.title


通过在 admin.py 中添加以下代码来注册此模型。

from django.contrib import admin
from .models import Post

# Register your models here.
admin.site.register(Post)

某些类型的项目可能有身份验证要求,而 Django 的内置 User 模型并不总是适合这些要求。例如,在某些网站上,使用电子邮件地址而不是用户名作为您的标识令牌更有意义。

Django 允许您通过为引用自定义模型的 AUTH_USER_MODEL 设置提供值来覆盖默认用户模型。

方法 2 – AUTH_USER_MODEL :

AUTH_USER_MODEL 是在 models.py 文件中引用用户模型时推荐的方法。

为此,您需要通过继承 AbstractUser 或 AbstractBaseUser 来创建自定义用户模型。

  • AbstractUser:如果您对 User 模型上的现有字段感到满意并且只想删除用户名字段,请使用此选项。
  • AbstractBaseUser:如果您想通过创建自己的全新 User 模型从头开始,请使用此选项。

如果您已经在名为 users 的应用程序中创建了一个自定义用户模型,比如 CustomUser ,您可以在 settings.py 文件中引用它,如下所示:

#settings.py

AUTH_USER_MODEL = 'users.CustomUser'

然后在博客 models.py 中添加以下代码:

蟒蛇3

# blog/models.py
from django.conf import settings
from django.db import models
  
class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    content = models.TextField()

通过在 admin.py 中添加以下代码来注册此模型。

from django.contrib import admin
from .models import Post

# Register your models here.
admin.site.register(Post)

方法 3 – get_user_model() :

如果您直接引用 User(例如,通过在外键中引用它),您的代码将无法在 AUTH_USER_MODEL 设置已更改为不同用户模型的项目中工作。

引用用户模型的另一种方法是通过 get_user_model 返回当前活动的用户模型:AUTH_USER_MODEL 中指定的自定义用户模型或默认的内置用户模型。

在 models.py 中添加以下代码:

蟒蛇3

from django.db import models
from django.contrib.auth import get_user_model
User=get_user_model()
# Create your models here.
class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    content= models.TextField()
    def __str__(self):
        return self.title

通过在 admin.py 中添加以下代码来注册此模型。

from django.contrib import admin
from .models import Post

# Register your models here.
admin.site.register(Post)

输出 -

以作者为用户创建实例