【Django】使用Django构建的Web服务(用户注册)

首先

我在使用Django构建的Web应用程序中实现了用户注册功能。
Django默认提供了用户模型,但这次我们使用了Django-Allauth进行实现。
我将写下实现内容和实现CustomUser的一些建议。

简述

在用户注册的基础上,使用了Allauth。
为了添加CustomUser模型,使用了AbstractUser。
在Django中,要更改用户模型可以继承AbstractUser或AbstractBaseUser之一,但是这次的更改只是添加字段,而且希望尽早完成开发,所以选择了使用AbstractUser。

新增用户应用程序

INSTALLED_APPS = [
    (中略  以下追加)
    #django-allauth
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    #myapp
    'teamup_site',
]

...
AUTH_USER_MODEL = 'teamup_site.CustomUser' # 追加

将allauth应用程序应用于Setting.py文件中的INSTALLED_APP。

在那下面,我们将使用teamup_web应用程序内的CustomUser模型,而不是默认的用户模型。

模特儿

我們將創建一個CustomUser模型。

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

from django.utils import timezone
from datetime import date

class Gender(models.TextChoices):
    MAN     = 'Man'
    WOMEN   = 'Women'
    OTHER   = 'Other'

class Work(models.TextChoices):
    SOFTWARE_ENGINEER       = 'Software Engineer'
    DESIGNER                = 'Designer'
    PLANNER                 = 'Planer'
    INFRASTRUCTURE_ENGINNER = 'Infrastructure Engineer'
    DATA_ENGINNER           = 'Data Engineer'

class CustomUser(AbstractUser, PermissionsMixin):
    username        = models.CharField(max_length=25)
    WORK_CHOICES    =[(w.value, w.name) for w in Work]
    your_job        = models.CharField(max_length=25, choices=WORK_CHOICES, default=Work.SOFTWARE_ENGINEER)
    GENDER_CHOICES  = [(g.value, g.name) for g in Gender]
    your_gender     = models.CharField(max_length=25, choices=GENDER_CHOICES, default=Gender.OTHER)
    birth_date      = models.DateField(blank=True, null=True,)
   
    def __str__(self):
        return self.username

如果没有特别需要添加的情况,书写方式是普通的。如果不需要特别添加的话,可以用”pass”来表示没问题。

这次,我们除了用户信息之外,还添加了职业选择和性别选择。两者都使用TextChoices来指定为枚举类型。

即使只需要默认的用户模型,也建议创建CustomUser。
一旦进行迁移,数据库的参考模型将变为默认的用户模型。将其更改为后来添加的CustomUser模型将是非常困难的工作,因此,预先创建CustomUser模型并将参考模型更改为该模型将使未来的更改变得更加简便。

表格

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

class SignupForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = ["username", "email"]

在这里,用户注册后,我们将在个人资料页面上创建一个用于填写信息的表单。暂时这样做。

管理员

from django.contrib import admin
from .models import CustomUser

# Register your models here.

admin.site.register(CustomUser)

最后,在管理页面上指定CustomUser来执行CRUD操作。

bannerAds