📜  Django 自定义用户模型 (1)

📅  最后修改于: 2023-12-03 14:40:47.644000             🧑  作者: Mango

Django自定义用户模型

简介

Django是一个使用非常广泛的Python Web框架,它带有自带的用户模型,使得我们可以轻松地添加用户验证、用户注册等功能。但是Django的自带用户模型可能无法满足我们的需求,例如我们需要更多的用户信息字段,或者使用不同的认证方式等。

因此,我们很有必要对Django的用户模型进行自定义,以满足我们特定的需求。本文将介绍如何使用Django自定义用户模型。

使用方法
创建一个新的Django项目

首先,我们需要创建一个新的Django项目。可以使用django-admin命令来创建一个新的项目:

django-admin startproject myproject
创建一个新的应用

我们需要在项目中创建一个新的应用来存放我们的用户模型。使用如下命令来创建一个新的应用:

python manage.py startapp accounts
在Django的settings配置文件中进行如下设置:
AUTH_USER_MODEL = 'accounts.User'

这个步骤很重要,它告诉Django我们将使用自定义的用户模型来代替自带的用户模型。

创建自定义的用户模型

接下来,在accounts应用中创建一个新的模型,用来代替Django自带的用户模型。例如,我们可以创建一个名为User的模型:

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

class User(AbstractUser):
    phone_number = models.CharField(max_length=20, unique=True)

这个模型继承了AbstractUser,使得我们可以使用Django自带的认证方法。并且又添加了一个额外的字段phone_number,用来存储用户的手机号。你可以根据自己的需求添加更多的字段。

迁移数据库

我们需要运行如下命令来创建数据库迁移文件:

python manage.py makemigrations

然后运行如下命令来执行数据库迁移:

python manage.py migrate
告诉Django使用自定义的用户模型

现在我们已经成功地创建了自定义的用户模型,并且通过迁移数据库使Django知道了这些变化。但是我们还需要告诉Django使用我们自定义的用户模型。

你需要在你的应用中的admin.py文件中进行如下设置:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)

这个设置告诉Django使用UserAdmin来管理我们的用户模型。

修改用户认证视图

现在,我们需要修改视图文件中的代码,使之与我们的新用户模型匹配。我们需要使用新的认证视图方法来实现我们自定义用户模型的认证。

在我们的应用中,我们需要创建一个名为forms.py文件,用来创建自定义的认证表单。

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

class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'phone_number')

在上面的代码中,我们使用自定义的User模型并指定需要显示的表单字段。

接着,我们需要修改视图代码:

from django.contrib.auth.views import LoginView
from .forms import CustomUserCreationForm

class CustomLoginView(LoginView):
    template_name = 'registration/login.html'
    form_class = CustomUserCreationForm

在上面的代码中,我们创建了一个名为CustomLoginView的视图,使用自定义的CustomUserCreationForm表单类。

创建模板

最后,我们需要创建模板来显示自定义的用户模型。例如,我们可以修改templates/registration/login.html:

{% extends 'base.html' %}

{% block content %}
    <h2>Login</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Login</button>
    </form>
{% endblock %}

在上面的代码中,我们使用自定义的表单,并将表单中的字段用as_p方法渲染成了HTML。

现在,我们已经成功地使用Django自定义了一个用户模型,并且将其应用到我们创建的新项目中。我们可以使用python manage.py runserver命令来启动服务器,访问http://127.0.0.1:8000/accounts/login即可开始尝试新的用户认证系统。

总结

通过本文的介绍,我们已经了解了如何使用Django自定义一个用户模型。这个功能非常强大,可以让我们创建一个适合自己需求的用户体系,并且使用Django内置的验证和认证方法来保障网站的安全性。希望读者可以在实践中掌握Django的这一重要功能。