4.寻光集后台管理系统-用户管理(用户表)

2022-12-02 15:39:37 浏览数 (1)

背景

页面中有很多的功能,对于不同的权限需要展示不同的页面,不同的权限可以操作的范围也不同,所以需要进行登录操作,并进行权限管理。

用户应用

创建应用

使用python manage.py startapp创建一个users应用

代码语言:javascript复制
(venv) (base) zhongxin:backend zhongxin$ python manage.py startapp users

创建成功后,为了方便管理,将应用统一移动到apps文件夹

设置环境变量

backend/LightSeeking/settings.pyINSTALLED_APPS中添加刚创建的应用

不过因为我们换了创建应用的路径,所以需要将新的路径添加到环境变量中,不然项目无法识别到

代码语言:javascript复制
import sys
from datetime import timedelta
from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(BASE_DIR / 'apps'))

在环境变量路径的首位添加了一个拼接了BASE_DIRapps的路径

这里的操作Pycharm是无法识别到的,所以为了达到同样的效果,需要将apps标记为「源代码根路径」

标记后文件夹就会变成蓝色

安装应用

然后修改INSTALLED_APPS

代码语言:javascript复制
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework_simplejwt',
    'django_filters',
    'corsheaders',
    'drf_yasg',
    'users.apps.UsersConfig',
]

用户模块

Django有自带了一个用户管理模块,所以不再从头编写,而是从它的基础上进行二次开发

用户表

Django自带用户管理模块的models.py文件为:

代码语言:javascript复制
from django.contrib.auth.models import AbstractUser

简单看一下AbstractUser和它的父类

它里面包含了很多登录的常用字段了

代码语言:javascript复制
id
password
last_login
is_superuser
username
first_name
last_name
email
is_staff
is_active
date_joined
groups
user_permissions

我们给它加上3个字段:

手机号
代码语言:javascript复制
mobile = models.CharField(
        '手机号码', max_length=, unique=True, help_text='手机号码', error_messages={
            'unique': '手机号码已注册',
            'max_length': '手机号码长度不正确',
        }, validators=[validate_mobile]
    )

models.CharField:手机号为varchar类型

max_length=11:手机号最长为11位

unique=True:手机号唯一

error_messages是一个键值对,键表示异常的校验,值表示异常的提示

validators:自定义异常校验

使用正则编写一个手机号格式校验函数validate_mobile

手机号必须以1开头第二位是3-9,后面还有9位数字

代码语言:javascript复制
def validate_mobile(value):
    if not re.match(r'1[3-9]d{9}', value):
        raise ValidationError("手机号码格式不正确")
用户姓名

格式为varchar类型最大长度为11位

代码语言:javascript复制
name = models.CharField('姓名', max_length=, help_text='姓名', error_messages={'max_length': '姓名长度不正确', })
权限列表
代码语言:javascript复制
roles = models.CharField('权限', max_length=, help_text='权限', null=True)

null=True:允许为空

完整代码
代码语言:javascript复制
import re
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.core.exceptions import ValidationError


def validate_mobile(value):
    if not re.match(r'1[3-9]d{9}', value):
        raise ValidationError("手机号码格式不正确")


class User(AbstractUser):
    mobile = models.CharField(
        '手机号码', max_length=, unique=True, help_text='手机号码', error_messages={
            'unique': '手机号码已注册',
            'max_length': '手机号码长度不正确',
        }, validators=[validate_mobile]
    )
    name = models.CharField('姓名', max_length=, help_text='姓名', error_messages={'max_length': '姓名长度不正确', })
    roles = models.CharField('权限', max_length=, help_text='权限', null=True)

    REQUIRED_FIELDS = ['mobile', 'name']  # 在通过 createsuperuser 管理命令创建用户时,将提示输入mobile字段

    def __str__(self):
        return self.username

    class Meta:
        db_table = 'tb_user'  # 表名
        verbose_name = 'user'  # 站点显示名
        verbose_name_plural = 'users'  # 复数显示

指定本项目用户模型类

backend/LightSeeking/settings.py中指定AUTH_USER_MODEL

代码语言:javascript复制
AUTH_USER_MODEL = 'users.User'

数据库迁移

代码语言:javascript复制
python manage.py makemigrations
python manage.py migrate
代码语言:javascript复制
(venv) (base) zhongxin:backend zhongxin$ python manage.py makemigrations
Migrations for 'users':
  apps/users/migrations/0001_initial.py
    - Create model User

(venv) (base) zhongxin:backend zhongxin$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, users
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying users.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying sessions.0001_initial... OK

迁移过程文件

迁移过程中会生成backend/apps/users/migrations/0001_initial.py

里面包含了迁移时候会创建的字段和相关信息

所以在提交代码的时候不要忘了它,下次数据库没有变更,进行迁移的时候只需要输入

代码语言:javascript复制
python manage.py migrate

查看生成的表

打开数据库连接工具,以SQLite方式进行连接

文件路径为backend/db.sqlite3

在开发阶段先使用db.sqlite3,后面会使用Mysql存储数据

0 人点赞