Django5+Vue3:OA系统前后端分离项目实战-自定义命令初始化(6)
Django5+Vue3 系列文章
前言
此项目采用 Django 框架的 5.0.7 版本进行开发。
Django 5.0 支持的 Python 版本为 3.10、3.11 和 3.12。
CSDN 专栏链接: ~快捷传送门: 留个赞再走呗 😭! ~
正文
初始化配置
为了确保命令行工具在应用程序中有效运行,必须先安装应用程序。
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
# 安装rest_framework
'rest_framework',
# 安装django-cors-headers
'corsheaders',
# 安装oaauth应用
'apps.oaauth'
]
以下是创建命令行工具的步骤:
- 在应用程序的 oaauth 文件夹中,创建一个名为 management 的 Python 包。确保包含 init.py 文件,这是 Python 识别该目录为包的必要文件。
- 在 management 包内,进一步创建一个名为 commands 的子包。
- 在 commands 包中,根据您的命令功能,创建相应的 Python 脚本文件。这些文件的名称将直接映射为可执行的命令名称。
Tips:
- 命令的执行依赖于应用程序的安装状态,即自定义命令的名称为文件名称。
- 确保每个包都遵循 Python 的包结构规范,包含必要的
__init__.py
文件。
---以上均为固定写法---
项目结构如下(示例):
├─apps
│ │ __init__.py
│ │
│ ├─oaauth
│ │ │
│ │ ├─management
│ │ │ │ __init__.py
│ │ │ │
│ │ │ ├─commands
│ │ │ │ │ initdepartments.py
│ │ │ │ │ inituser.py
│ │ │ │ │ __init__.py
初始化部门数据
在创建的 initdepartments.py 文件中,配置初始化部门数据
from django.core.management.base import BaseCommand
from apps.oaauth.models import OADepartment
class Command(BaseCommand):
def handle(self,*args, **options):
# 初始化部门数据
boarder = OADepartment.objects.create(name='董事会', intro='董事会')
developer = OADepartment.objects.create(name='产品开发部', intro='产品设计,技术开发')
operator = OADepartment.objects.create(name='运营部', intro='客户运营,产品运营')
saler = OADepartment.objects.create(name='销售部', intro='销售产品')
hr = OADepartment.objects.create(name='人事部', intro='员工招聘,员工培训,员工考核')
finance = OADepartment.objects.create(name='财务部', intro='财务报表,财务审核')
self.stdout.write('部门数据初始化成功!')
完成编写后,无需手动保存。create 方法已自动将数据同步至数据库。
终端执行自定义命令将模型同步至数据库
python manage.py initdepartments
此时终端将会输出 部门数据初始化成功!
检查数据库:部门数据初始化成功
初始化用户数据
在创建的 inituser.py 文件中,配置初始化部门数据
from django.core.management.base import BaseCommand
from apps.oaauth.models import OAUser, OADepartment
class Command(BaseCommand):
def handle(self, *args, **options):
boarder = OADepartment.objects.get(name='董事会')
developer = OADepartment.objects.get(name='产品开发部')
operator = OADepartment.objects.get(name='运营部')
saler = OADepartment.objects.get(name='销售部')
hr = OADepartment.objects.get(name='人事部')
finance = OADepartment.objects.get(name='财务部')
# 董事会的员工,都是superuser用户
# 1. 东东:属于董事会的leader
dongdong = OAUser.objects.create_superuser(email="dongdong@qq.com",realname="东东",password="111111",department=boarder)
# 2. 多多:董事会
duoduo = OAUser.objects.create_superuser(email="duoduo@qq.com",realname="多多",password="111111",department=boarder)
# 3. 张三:产品开发部的leader
zhangsan = OAUser.objects.create_user(email="zhangsan@qq.com",realname="张三",password="111111",department=developer)
# 4.李四:运营部的leader
lisi = OAUser.objects.create_user(email="lisi@qq.com",realname="李四",password="111111",department=operator)
# 5. 王五:人事部的leader
wangwu = OAUser.objects.create_user(email="wangwu@qq.com",realname="王五",password="111111",department=hr)
# 6. 赵六:财务部的leader
zhaoliu = OAUser.objects.create_user(email="zhaoliu@qq.com",realname="赵六",password="111111",department=finance)
# 7. 孙七:销售部的leader
sunqi = OAUser.objects.create_user(email="sunqi@qq.com",realname="孙七",password="111111",department=saler)
# 给部门指定leader和manager
# 1. 董事会
boarder.leader = dongdong
boarder.manager = None
# 2.产品开发部
developer.leader = zhangsan
developer.manager = dongdong
# 3.运营部
operator.leader = lisi
operator.manager = dongdong
# 4.销售部
saler.leader = sunqi
saler.manager = dongdong
# 5.人事部
hr.leader = wangwu
hr.manager = duoduo
# 6.财务部
finance.leader = zhaoliu
finance.manager = duoduo
boarder.save()
developer.save()
operator.save()
saler.save()
hr.save()
finance.save()
self.stdout.write('初始用户创建成功!')
如果看不懂模型字段的设计逻辑请自行前往
部门表设计: 点个赞再走呗 😭
终端执行自定义命令将模型同步至数据库
python manage.py inituser
此时终端将会输出 初始用户创建成功!
嘿嘿! 是不是有人报错了? 😂
在之前的敲代码时,如果已经执行了相关代码,导致数据库中已经存在了部分用户数据,您可以选择清除这些数据。如果遇到删除操作失败的情况,这可能是因为 department 表与 user 表之间存在双向引用关系,导致数据无法直接删除。
在这种情况下,博主推荐采取一种更为暴力直接的方法:即删除现有的 oa 数据库,然后重新初始化一个新的 oa 数据库
不知道方法的可以跳转到专栏下的另一篇文章: ~数据库重建: 留个赞再走呗 😭! ~
重建数据库之后再依次终端输入以下指令完成模型映射:
python manage.py makemigrations
python manage.py migrate
python manage.py initdepartments
python manage.py inituser
到此,测试数据已经全部完成了! 如果觉得博主写的够详细的话就留杯奶茶再走呗!💏
您的支持就是我的动力!( ̄ ▽  ̄)↗
总结
本节详细讲解了如何创建自定义命令,以及如何通过自定义命令来初始化数据,有效地解决了项目部署后数据预设的需求。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Fender