前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >4.寻光集后台管理系统-用户管理(用户表)

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

作者头像
zx钟
发布2022-12-02 15:39:37
6210
发布2022-12-02 15:39:37
举报
文章被收录于专栏:测试游记测试游记

背景

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

用户应用

创建应用

使用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存储数据

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 用户应用
    • 创建应用
      • 设置环境变量
        • 安装应用
        • 用户模块
          • 用户表
            • 手机号
            • 用户姓名
            • 权限列表
            • 完整代码
          • 指定本项目用户模型类
            • 数据库迁移
              • 迁移过程文件
                • 查看生成的表
                相关产品与服务
                访问管理
                访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档