Django 在 Django 中为 auth_user 表添加自定义字段

Django 在 Django 中为 auth_user 表添加自定义字段

在本文中,我们将介绍如何在 Django 的 auth_user 表中添加自定义字段。auth_user 表是 Django 自带的用户认证系统中的默认用户模型,用于存储用户的身份验证信息。有时候,我们需要在这个模型中添加一些额外的字段来满足我们的业务需求。

阅读更多:Django 教程

为什么添加自定义字段?

在一些情况下,Django 自带的用户模型无法满足我们的特定需求。例如,我们可能需要为用户模型添加一个电话号码字段,以及一些其他与用户相关的定制属性。对于这些额外字段,我们可以选择两种常见方式来处理:继承 AbstractUser 或 AbstractBaseUser。

AbstractUser 是 auth_user 模型的一个子类,它提供了一些基本的用户功能。通过继承 AbstractUser,我们可以轻松地在用户模型中添加自定义字段。但是,需要注意的是,AbstractUser 提供的字段可能比较多,使用时需要仔细考虑字段的选择。

如果我们想要完全自定义用户模型,包括完全自定义的身份验证逻辑和字段,我们可以选择继承 AbstractBaseUser。这种方式更加灵活,但同时也需要我们手动处理用户认证相关的逻辑。

接下来,我们将使用继承 AbstractUser 的方式来为 auth_user 添加自定义字段。

步骤

1. 创建新的用户模型

首先,我们需要创建一个新的用户模型,该模型将扩展 AbstractUser 类。在你的项目的 models.py 文件中,添加以下代码:

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # 添加自定义字段
    phone_number = models.CharField(max_length=15)
Python

在上面的示例中,我们创建了一个名为 CustomUser 的模型,并添加了一个名为 phone_number 的自定义字段。

2. 修改设置文件

接下来,我们需要在项目的设置文件中指定新的用户模型。在 settings.py 文件中找到并修改以下代码:

AUTH_USER_MODEL = 'your_app_name.CustomUser'
Python

your_app_name 替换为你的应用的名称,如 auth

3. 创建和应用数据库迁移

完成上述步骤后,我们需要创建和应用数据库迁移以应用新的用户模型。在终端中执行以下命令:

python manage.py makemigrations
python manage.py migrate
Python

这将创建和应用与新用户模型相关的数据库迁移。

示例

对于上述步骤的例子,我们将在用户模型中添加一个额外的字段 phone_number。这个字段将存储用户的电话号码。我们可以在注册表单中显示这个字段,并保存用户提交的电话号码。

首先,我们需要在 forms.py 文件中创建一个新的注册表单:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):
    phone_number = forms.CharField(max_length=15)

    class Meta:
        model = CustomUser
        fields = ('username', 'password1', 'password2', 'phone_number')
Python

在上面的代码中,我们创建了一个名为 CustomUserCreationForm 的表单,并为其添加了一个新的字段 phone_number。该表单继承自 Django 自带的 UserCreationForm,并指定了要显示的字段和模型。

接下来,在 views.py 文件中,我们可以使用这个新的表单来处理用户注册:

from django.shortcuts import render, redirect
from .forms import CustomUserCreationForm

def register(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('home')
    else:
        form = CustomUserCreationForm()

    return render(request, 'register.html', {'form': form})
Python

在上述代码中,我们根据提交的表单数据创建新的用户。如果表单有效,我们将用户重定向到主页。如果方法为 GET,我们将显示一个空的注册表单。

现在,我们可以在模板文件 register.html 中显示该字段:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">注册</button>
</form>
HTML

上述代码将显示注册表单,其中包含所有字段,包括我们添加的 phone_number 字段。

总结

在本文中,我们介绍了如何在 Django 的 auth_user 表中添加自定义字段。我们使用继承 AbstractUser 的方式扩展了用户模型,并演示了如何在注册表单中使用新的字段。通过添加自定义字段,我们可以根据业务需求扩展 auth_user 表,实现更灵活的用户认证系统。这对于构建个性化的 Web 应用程序来说非常有用。希望本文对你有所帮助!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册