如何在 Django 中使用用户模型?
Django 的内置身份验证系统很棒。在大多数情况下,我们可以开箱即用地使用它,从而节省了大量的开发和测试工作。它适合大多数用例并且非常安全。但有时我们需要做一些微调以适应我们的 Web 应用程序。通常我们想要存储更多与我们的用户相关的数据,但下一个问题可能是 Django 开发人员应该如何引用用户? Django 官方文档列出了三种不同的方式:
- 用户
- AUTH_USER_MODEL
- get_user_model()
解释:
通过示例说明如何引用用户模型。考虑一个名为mysite的项目,它有一个应用程序名称blog 。
Refer to the following article to check how to create a project and an app in Django.
How to Create Basic Project using MVT in Django ?
How to Create an App in Django?
方法 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 模型从头开始,请使用此选项。
Refer Below Article for Creating Custom User model:
Creating Custom User Model
如果您已经在名为 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)
输出 -