如何在Django中使用用户模型

如何在Django中使用用户模型

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

  • User
  • AUTH_USER_MODEL
  • get_user_model()

解释:

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

方法1–用户模式直接:

在models.py里面添加以下代码。

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

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

from django.contrib import admin
from .models import Post

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

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

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

方法2 – AUTH_USER_MODEL :

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

为此,你需要通过子类化AbstractUser或AbstractBaseUser来创建自定义用户模型。

  • AbstractUser: 如果你对用户模型上的现有字段很满意,只是想删除用户名字段,请使用这个选项。
  • AbstractBaseUser: 如果你想从头开始创建你自己的、全新的用户模型,请使用这个选项。

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

#settings.py

AUTH_USER_MODEL = 'users.CustomUser'

然后在blog models.py中加入以下代码。

# 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里面添加以下代码。

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中使用用户模型?

以作者为用户创建实例

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Django 教程