当前位置: 首页 > news >正文

Django command执行脚本

python web项目中经常会使用到脚本,一般来说有两种很简单的方法,一种是直接python function,另一种就是 django 自定义command。

对比常规脚本

这里举个简单的例子,比如初始化数据、文件名称为initialize_data.py

(1)使用方式1:

from django.utils import timezone
from your_app.models import Your_modeldef initialize_data():unit_data = [{'name': 'Tom','age': 12,},{'name': 'Jerry','age': 23,}]Your_model.objects.bulk_create(Your_model(**data))# 调用初始化函数
initialize_data()

(2)使用方式2(web开发推荐),用BaseCommand(使用from django.core.management.base import BaseCommand可以创建一个自定义的Django管理命令,以便更好地组织和管理脚本):

from django.core.management.base import BaseCommand
from django.utils import timezone
from your_app.models import Your_modelclass Command(BaseCommand):help = 'Initialize data'def handle(self, *args, **options):unit_data = [{'name': 'Tom','age': 12,},{'name': 'Jerry','age': 23,}]Your_model.objects.bulk_create(Your_model(**data))

通过继承BaseCommand类并实现handle方法,我们可以将脚本逻辑放在handle方法中。然后,我们可以在命令行中运行python manage.py initialize_data来执行该命令。

优势:

  1. 更好的组织和管理:使用BaseCommand可以将脚本逻辑封装为一个自定义的Django管理命令,使代码更加模块化和可维护。
  2. 支持命令行参数:BaseCommand提供了处理命令行参数的功能,可以通过命令行传递参数给脚本。
  3. 集成Django环境:使用BaseCommand可以直接访问Django的模型和其他功能,无需额外的配置。

劣势:

  1. 需要创建一个管理命令:相比直接运行脚本文件,使用BaseCommand需要创建一个自定义的管理命令,并在命令行中运行该命令。


命令行参数

这里讲一下命令行参数。

注:Command类名是用于自定义管理命令的约定,但你可以选择其他名称,只需确保继承自BaseCommand类即可

from django.core.management.base import BaseCommand
from your_app.models import YourModelclass Command(BaseCommand):help = 'Initialize data'def add_arguments(self, parser):parser.add_argument('--name', type=str, help='Set name value')parser.add_argument('--age', type=int, help='Set age value')def handle(self, *args, **options):name = options['name']age = options['age']if name and age:YourModel.objects.create(name=name, age=age)else:self.stdout.write(self.style.ERROR('Please provide both name and age values.'))

运行以下指令即可创建:

python manage.py initialize_data --name Tom --age 1

        使用add_arguments方法来定义命令行参数。在这个示例中,添加了--name--age两个参数,分别用于设置nameage的值,并提供了帮助文本。在handle方法中,我们通过options['name']options['age']来获取命令行参数的值,并根据这些值创建YourModel实例。

其他

在执行脚本时,往往要注意安全性、可拓展性。

        (1)安全性,如批量修改、多表修改信息,这时候需要加事务保障数据安全;同时注意异常捕获,打印日志检查;

        (2)可拓展性,编写脚本往往我们还希望做到后续可拓展,可用,命令行参数就可以实现这个性质。

        

http://www.lryc.cn/news/233105.html

相关文章:

  • GLSL: Shader cannot be patched for instancing.
  • Django测试环境搭建及ORM查询(创建外键|跨表查询|双下划线查询 )
  • css 设置网页最小字体为12px
  • Failed to restart networking.service: Unit networking.service not found.
  • 基于单片机设计的水平仪(STC589C52+MPU6050)
  • 射频与微波综合测试仪-4958手持式微波综合测试仪
  • Redis内存淘汰机制
  • EXCEL——计算数据分散程度的相关函数
  • 详解如何使用Jenkins一键打包部署SpringBoot项目
  • 【JVM】内存区域划分、类加载机制(双亲委派模型图解)、垃圾回收(可达性分析、分代回收)
  • 解决 requests 2.28.x 版本 SSL 错误
  • hive数据质量规范
  • Jenkinsfile+Dockerfile前端vue自动化部署
  • SQL server从安装到入门(一)
  • Unexpected WSL error错误处理备忘
  • 计算机毕业设计 基于Vue的米家商城系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Linux终端与交互式Bash
  • 呕心整理的常用热门API大全
  • Redis7.2.3集群安装,新增节点,删除节点,分配哈希槽,常见问题
  • 并行计算机系统结构基础
  • Ubuntu开启永久开启串口权限方法
  • zTree设置默认选中节点(当前组织默认选中)
  • 结合 Django 和 Vue.js 打造现代 Web 应用
  • 【Linux网络】ssh服务与配置,实现安全的密钥对免密登录
  • 自建ES7.10集群,使用OSS快照恢复数据测试
  • 电源线虚接,导致信号线发烫
  • 【23真题】难!985难度第一梯队!
  • 计算机网络———ipv6简解
  • SQL之开窗函数
  • OpenAI与微软合作,构建 ChatGPT 5 模型;10天准确天气预报