django项目添加测试数据的三种方式

news2024/9/22 4:37:28

文章目录

        • 自定义终端命令
        • Faker添加模拟数据
        • 基于终端脚本来完成数据的添加
          • 编写python脚本
          • 编写shell脚本
          • 执行脚本需要权限
          • 使用shell命令来完成测试数据的添加

添加测试数据在工作中一共有三种方式:

  1. 可以根据django的manage.py指令进行[自定义终端命令]
  2. 可以采用第三方模块Faker来完成数据的模拟添加(Faker模块可以写在上面第一种方法里面)
  3. 可以使用python脚本或者shell脚本来完成

如果数据量不是很大,可以通过sql语句以及在数据库添加。

自定义终端命令

文档:https://docs.djangoproject.com/zh-hans/3.2/howto/custom-management-commands/

在子应用目录下添加一个 management/commands 包目录,然后这个commands里面处理__init__.py以外其他文件的文件名将作为django-admin或者python manage.py的命令选项了。注意:文件名不能以_开头,否则不会被识别为命令。

接着我们可以在commands包下根据自己的业务需要,编写对应的命令。例如,我们现在需要在courses子应用下添加课程对应的测试数据,所以我们在courses下创建 management/commands 包目录,然后创建命令文件example.py,代码:

import constants
from django.core.management.base import BaseCommand, CommandError
from courses.models import Teacher

# 类名必须是Command而且一个文件就是一个命令类,这个命令类必须直接或间接继承BaseCommand
class Command(BaseCommand):
    help = '添加课程相关的测试数据'

    # 如果当前命令,需要接受来自终端的参数,可以使用add_arguments
    def add_arguments(self, parser):
        pass
        # 位置参数,必填项
        # parser.add_argument('name', nargs='+', type=int)

        # 命令参数,可选项
        # parser.add_argument(
        #     '--table',
        #     action='store_true',
        #     help='Delete poll instead of closing it',
        # )

    # 命令执行的核心方法,
    def handle(self, *args, **options):
        """添加测试数据"""
        print("添加测试数据")

        Teacher.objects.create(
            name="赵小明",
            avatar="teacher/avatar.jpg",
            role=1,
            title="老师",
            signature="从业3年,管理班级无数",
            brief="从业3年,管理班级无数",
        )

此时,执行python manage.py可以看到course应用下已经有了相关的终端命令

在这里插入图片描述

Faker添加模拟数据

文档:https://faker.readthedocs.io/en/stable/locales/zh_CN.html#

github:https://github.com/joke2k/faker/

faker是一个在多个编程语言里面都比较常用的第三方工具类,它的作用就是可以提供非常有效的方式帮开发者生成一些模拟仿真的测试数据。

pip install faker

可以结合上面的自定义终端命令来实现,example.py,代码:

import constants,random
from django.core.management.base import BaseCommand, CommandError
from courses.models import Teacher
from faker import Faker
from django.conf import settings

# 类名必须是Command而且一个文件就是一个命令类,这个命令类必须直接或间接继承BaseCommand
class Command(BaseCommand):
    help = '添加课程相关的测试数据'

    # 如果当前命令,需要接受来自终端的参数,可以使用add_arguments
    def add_arguments(self, parser):
        # 位置参数,必填项
        # parser.add_argument('date_type', nargs='+', type=int, help="添加数据的类型")

        # 命令参数,可选项
        parser.add_argument(
            '--type',
            dest='type',
            default='teacher',
            type=str,
            help='测试数据的类型',
        )

        parser.add_argument(
            '--number',
            dest='number',
            default=10,
            type=int,
            help='添加数据的数量',
        )

    # 命令执行的核心方法,
    def handle(self, *args, **options):
        """添加课程相关的测试数据"""
        if options["type"] == "teacher":
            self.add_teacher(options)
        elif options["type"] == "direction":
            self.add_direction(options)

    def add_teacher(self,options):
        """添加授课老师的测试数据"""
        faker = Faker(["zh_CN"])
        for i in range(options["number"]):
            Teacher.objects.create(
                name=faker.unique.name(), # 唯一的姓名
                avatar="teacher/avatar.jpg",
                role=random.randint(0,2),
                title="老师",
                signature= "从业3年,管理班级无数",
                brief= f"从业3年,管理班级无数,联系电话:{faker.unique.phone_number()},邮箱地址:{faker.unique.company_email()}",
            )
        print("添加授课老师的测试数据完成....")

    def add_direction(self,options):
        """添加学习方向的测试数据"""
        print("添加学习方向的测试数据完成....")

终端下调用:

cd ~/Desktop/luffycity/luffycityapi
python manage.py example
python manage.py example --type=teacher
python manage.py example --type=direction
python manage.py example --type=teacher  --number=10
基于终端脚本来完成数据的添加

要编写一个python或者shell脚本,就要清楚一件事情,就是我们可以根据对应的语言来编写对应的终端代码,但是必须在首行的位置声明执行这些代码的解析器是谁?路径在哪里?

可以通过whereis python或者whereis bash得到python解释器或者bash的路径

在这里插入图片描述

当脚本中需要用到某些库时,就要确保首行路径环境中已经下载

编写python脚本

首行指定运行当前代码的python解释器。写完整绝对路径

test1.py,代码:

#! /home/jack/anaconda3/envs/luffycity/bin/python

# 首行以后的代码必须要符合python的语法
"""
针对通用代码的运行,可以直接使用系统内置的全局环境的python解释器,也可以使用虚拟环境的解析器
#! /usr/bin/python3
如果这个代码需要调用对应的第三方模块,那么就要写上安装该模块的python解释器
#! /home/moluo/anaconda3/envs/luffycity/bin/python
"""
import os, sys
from faker import Faker

faker = Faker(["zh_CN"])
user = faker.unique.name()
print(f"hello,{user}")

# python获取终端参数
try:
    dir = sys.argv[1]  # 0 ==> ./test1.py    1 ==> user
except Exception as e:
    dir = "2021"

# python直接执行shell命令
# ret = os.popen("ls -l")
ret = os.popen("ls -l")  # 等同于上一行
print(ret.read())

ret = os.popen(f"mkdir {dir} && cd {dir} && echo 'hello {user}' > index.html")  # 等同于上一行
print(ret.read())

编写shell脚本

首行指定运行当前代码的shell解释器。写完整路径。

test2.sh,代码:

#!/bin/bash

ls -lar

echo 'hello'

git add .
git commit -m "hello"
git push

# 通过这种方式执行命令行语句可以保存记录,一目了然执行过哪些命令
执行脚本需要权限

不管编写的什么的脚本命令,编写完脚本以后,脚本本身因为操作系统默认会取消它的执行权限,所以我们通过以下命令来增加执行的权限。

chmod +x 对应的文件名
# chmod 755 对应的文件名

# 例如,给python脚本赋予执行的权限。文件名假设为:test1.py
chmod +x test1.py

# 例如,shell脚本赋予执行的权限,文件名假设为:test2.sh
chmod +x test2.sh

赋予了权限以后,就可以执行脚本了。

但是执行过程中, 一定使用相对路径的方式来执行这个脚本。

# 例如,上面的test1.py或者test2.sh
./test1.py
./test2.sh

# 如果不希望使用相对路径,则需要把当前文件所载的目录设置为环境变量才行。
使用shell命令来完成测试数据的添加
  1. 编写一个sql语句的文件test_data.sql

    -- 如果使用数据库本身的外键,则添加/删除/修改数据时,务必关闭原来表中的主外键约束功能
    set FOREIGN_KEY_CHECKS=0;
    
    -- 清空原有的课程信息表信息
    truncate table fg_course_info;
    
    -- 添加课程信息
    INSERT INTO luffycity.fg_course_info (id, name, orders, is_show, is_deleted, created_time, updated_time, course_cover, course_video, course_type, level, description, pub_date, period, attachment_path, attachment_link, status, students, lessons, pub_lessons, price, recomment_home_hot, recomment_home_top, category_id, direction_id, teacher_id)
    VALUES
    (1, '7天Typescript从入门到放弃', 1, 1, 0, '2021-07-22 04:35:05.696823', '2021-07-22 04:35:05.696871', 'course/cover/course-10.png', '', 0, 0, '<p>7天Typescript从入门到放弃</p>', '2021-07-22', 7, 'luffycity-celery用法1.zip', null, 0, 988, 100, 30, 998.00, 1, 1, 2, 1, 1),
    (2, '3天Typescript精修', 1, 1, 0, '2021-07-22 04:35:05.696823', '2021-07-22 04:35:05.696871', 'course/cover/course-9.png', '', 0, 0, '<p>3天Typescript精修</p>', '2021-07-22', 7, 'luffycity-celery用法1.zip', null, 0, 988, 100, 30, 998.00, 1, 1, 2, 1, 1),
    (3, '3天学会Vue基础', 1, 1, 0, '2021-07-22 04:35:05.696823', '2021-07-22 04:35:05.696871', 'course/cover/course-8.png', '', 0, 0, '<p>3天学会Vue基础</p>', '2021-07-22', 7, 'luffycity-celery用法1.zip', null, 0, 988, 100, 30, 998.00, 1, 1, 2, 1, 1);
    
    -- 如果使用数据库本身的外键,则添加/删除/修改数据以后,务必开启原来表中的主外键约束功能
    set FOREIGN_KEY_CHECKS=1;
    
  2. 编写一个shell脚本test_data.sh来执行上面的文件

    #! /bin/bash
    mysql -uroot -p123 luffycity < ./test_data.sql
    
  3. 赋予create_data.sh执行的权限

    chmod +x test_data.sh
    ./test_data.sh
    

若有错误与不足请指出,关注DPT一起进步吧!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2154102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pthread_cond_signal 和pthread_cond_wait

0、pthread_join()函数作用&#xff1a; pthread_join() 函数会一直阻塞调用它的线程&#xff0c;直至目标线程执行结束&#xff08;接收到目标线程的返回值&#xff09;&#xff0c;阻塞状态才会解除。如果 pthread_join() 函数成功等到了目标线程执行结束&#xff08;成功获取…

【C++】list详解及模拟实现

目录 1. list介绍 2. list使用 2.1 修改相关 2.2 遍历 2.3 构造 2.4 迭代器 2.5 容量相关 2.6 元素访问 2.7 操作相关 3. 模拟实现 3.1 节点类 3.1.1 初始结构 3.1.2 节点的构造函数 3.2 迭代器类 3.2.1 初始结构 3.2.2 迭代器 3.2.3 迭代器-- 3.2.4 解引…

1.随机事件与概率

第一章 随机时间与概率 1. 随机事件及其运算 1.1 随机现象 ​ 确定性现象&#xff1a;只有一个结果的现象 ​ 确定性现象&#xff1a;结果不止一个&#xff0c;且哪一个结果出现&#xff0c;人们事先并不知道 1.2 样本空间 ​ 样本空间&#xff1a;随机现象的一切可能基本…

ML 系列:机器学习和深度学习的深层次总结(05)非线性回归

图 1.不同类型的回归 一、说明 非线性回归是指因变量和自变量之间存在非线性关系的模型。该模型比线性模型更准确、更灵活&#xff0c;可以获取两个或多个变量之间复杂关系的各种曲线。 二、关于 当数据之间的关系无法用直线预测并且呈曲线形式时&#xff0c;我们应该使用非线性…

MySQL篇(索引)(持续更新迭代)

目录 一、简介 二、有无索引情况 1. 无索引情况 2. 有索引情况 3. 优劣势 三、索引结构 1. 简介 2. 存储引擎对于索引结构的支持情况 3. 为什么InnoDB默认的索引结构是Btree而不是其它树 3.1. 二叉树&#xff08;BinaryTree&#xff09; 3.2. 红黑树&#xff08;RB&a…

6、等级保护政策内容

数据来源&#xff1a;6.等级保护政策内容_哔哩哔哩_bilibili 信息安全产品管理与响应 等级管理 对信息系统中使用的信息安全产品实行按等级管理&#xff0c;信息安全事件应分等级响应与处置。 预测评服务由测评公司和咨询公司提供预测评服务&#xff0c;根据技术要求和测评要…

高校心理辅导系统:Spring Boot技术实现指南

目 录 摘 要 I ABSTRACT II 1绪 论 1 1.1研究背景 1 1.2设计原则 1 1.3论文的组织结构 2 2 相关技术简介 3 2.1Java技术 3 2.2B/S结构 3 2.3MYSQL数据库 4 2.4Springboot框架 4 3 系统分析 6 3.1可行性分析 6 3.1.1技术可行性 6 3.1.2操作可行性 6 3.1.3经济可行性 6 3.1.4法律…

[OpenGL]使用OpenGL绘制带纹理三角形

一、简介 本文介绍了如何使用使用OpenGL绘制带纹理三角形。 在绘制带纹理的三角形时&#xff0c; 首先使用.h读取准备好的.png格式的图片作为纹理&#xff0c;然后在fragment shader中使用 ... in vec2 textureCoord; uniform sampler2D aTexture1; void main() {FragColor …

嵌入式 开发技巧和经验分享

文章目录 前言嵌入式 开发技巧和经验分享目录1.1嵌入式 系统的 定义1.2 嵌入式 操作系统的介绍1.3 嵌入式 开发环境1.4 编译工具链和优化1.5 嵌入式系统软件开发1.6 嵌入式SDK开发2.1选择移植的系统-FreeRtos2.2FreeRtos 移植步骤2.3 系统移植之中断处理2.4系统移植之内存管理2…

奥比中光深度相机相关使用内容

奥比中光深度相机相关使用内容 Windows平台测试官方软件关于python环境的配置1、安装CMake2、安装Visual Studio3、项目地址下载4、配置Visual Studio5、完成基于Python的SDK配置官网教学视频地址 3D视觉开发者社区 官方文档地址 效果: Windows平台测试官方软件 Window…

《高等代数》线性相关和线性无关(应用)

说明&#xff1a;此文章用于本人复习巩固&#xff0c;如果也能帮到大家那就更加有意义了。 注&#xff1a;1&#xff09;线性相关和线性无关的证明方法中较为常用的方法是利用秩和定义来证明。 2&#xff09;此外&#xff0c;线性相关和线性无关的证明常常也会用到反证法。 3&…

简单水印通过python去除

简单水印通过python去除 先看效果&#xff0c;如果效果不是你需要的就可以不用浪费时间。 注意&#xff1a;这种主要还是对应的文字在水印上方的情况&#xff0c;同时最好不要有渐变水印否则可能最后输出的图片的水印还会有所残留&#xff0c;不过还是学习使用&#xff0c;相信…

DOS(Disk Operating System,磁盘操作系统)常用指令

目录 背景: 早期探索: DOS之父&#xff1a; 发展历程&#xff1a; 常用指令&#xff1a; 进入命令&#xff1a; 操作1.进入和回退&#xff1a; 操作2.增、删&#xff1a; 操作3.其它&#xff1a; 总结: 背景: 早期探索: DOS(Disk Operating System,磁盘操作系统)在…

【Web】PolarCTF2024秋季个人挑战赛wp

EZ_Host 一眼丁真命令注入 payload: ?host127.0.0.1;catf* 序列一下 exp: <?phpclass Polar{public $lt;public $b; } $pnew Polar(); $p->lt"system"; $p->b"tac /f*"; echo serialize($p);payload: xO:5:"Polar":2:{s:2:"…

VSCode C++ Tasks.json基本信息介绍

前言 上文介绍了VSCode在Windows环境下如果创建C项目和编译多个文件项目&#xff0c;但是只是粗略的说明了一下Tasks.json文件。今天对tasks.json进行进一步的了解。 内容 Tasks文件 {"version": "2.0.0","tasks": [{"type": &quo…

C#进阶-基于雪花算法的订单号设计与实现

在现代电商系统和分布式系统中&#xff0c;高效地生成全局唯一的订单号是一个关键需求。订单号不仅需要唯一性&#xff0c;还需要具备一定的趋势递增性&#xff0c;以满足数据库索引和排序的需求。本文将介绍如何在C#中使用雪花算法&#xff08;Snowflake&#xff09;设计和实现…

IntelliJ IDEA 2024创建Java项目

一、前言 本文将带领大家手把手创建纯Java项目&#xff0c;不涉及Maven。如有问题&#xff0c;欢迎大家在评论区指正说明&#xff01; 二、环境准备 名称版本jdk1.8idea2024 1.4操作系统win10 jdk的安装教程 idea的安装教程 三、创建项目 首先我们点击新建项目 然后我们…

基于SpringBoot+Vue+MySQL的国产动漫网站

系统展示 用户前台界面 管理员后台界面 系统背景 随着国内动漫产业的蓬勃发展和互联网技术的快速进步&#xff0c;动漫爱好者们对高质量、个性化的国产动漫内容需求日益增长。然而&#xff0c;市场上现有的动漫平台大多以国外动漫为主&#xff0c;对国产动漫的推广和展示存在不…

网页聊天——测试报告——Selenium自动化测试

一&#xff0c;项目概括 1.1 项目名称 网页聊天 1.2 测试时间 2024.9 1.3 编写目的 对编写的网页聊天项目进行软件测试活动&#xff0c;揭示潜在问题&#xff0c;总结测试经验 二&#xff0c;测试计划 2.1 测试环境与配置 服务器&#xff1a;云服务器 ubuntu_22 PC机&am…

十六、电压比较电路

电压比较电路 1、电压比较器的作用和工作过程 2、比较器的输入-输出特性曲线, 3、如何构成迟滞比较器。