当前位置: 首页 > 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)可拓展性,编写脚本往往我们还希望做到后续可拓展,可用,命令行参数就可以实现这个性质。

        

相关文章:

Django command执行脚本

python web项目中经常会使用到脚本,一般来说有两种很简单的方法,一种是直接python function,另一种就是 django 自定义command。 对比常规脚本 这里举个简单的例子,比如初始化数据、文件名称为initialize_data.py (1…...

GLSL: Shader cannot be patched for instancing.

最近在 unity 里碰到了这么一个错误,只有这么点信息,让人看着挺懵逼的,后来发现,是因为 unity 的 terrain 组件在设置里勾了 Draw Instanced 选项导致的,感觉应该是 unity 的 bug。 因为错出在 2021,2022就…...

Django测试环境搭建及ORM查询(创建外键|跨表查询|双下划线查询 )

文章目录 一、表查询数据准备及测试环境搭建模型层前期准备测试环境搭建代码演示 二、ORM操作相关方法三、ORM常见的查询关键字四、ORM底层SQL语句五、双下划线查询数据查询(双下划线)双下划线小训练Django ORM __双下划线细解 六、ORM外键字段创建基础表…...

css 设置网页最小字体为12px

谷歌浏览器默认最小字体为12px,但保不准万一有一天谷歌取消这个默认设置,或者一些人在设置中改了最小字体,为了防止万一,故系统设置了最小字体,主要利用了min和var的特性 :root {--responsive-font-size-primary: max…...

Failed to restart networking.service: Unit networking.service not found.

虚拟机Vmware中的Ubuntu20.0没有网络,ifconfig命令没有IP 如果在VMware中运行的Ubuntu 20.04虚拟机没有网络,并且ifconfig命令没有显示IP地址,你可以采取以下几个步骤来诊断和解决问题: 确认虚拟机网络设置: 确保虚拟机的网络适配器是开启的,并且配置正确。确认是否选择…...

基于单片机设计的水平仪(STC589C52+MPU6050)

一、前言 【1】项目背景 水平仪是一种常见的测量工具,用于检测物体或设备的水平姿态。在许多应用中,如建筑、制造和航空等领域,保持设备的水平姿态是非常重要的。为了实现实时的水平检测和显示,基于单片机设计的水平仪是一个常见…...

射频与微波综合测试仪-4958手持式微波综合测试仪

4958 微波综合测试仪 频率范围:1MHz~20GHz 4958手持式微波综合测试仪测量频率范围可达1MHz~20GHz,集电缆和天线驻波比测试、不连续点故障定位测试、插入损耗和增益测试、频谱分析、功率测量等多种功能于一体,携带方便&…...

Redis内存淘汰机制

Redis内存淘汰机制 引言 Redis 启动会加载一个配置&#xff1a; maxmemory <byte> //内存上限 默认值为 0 (window版的限制为100M)&#xff0c;表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量&#xff0c;提前设置好内容上限。 此时思考一个问题…...

EXCEL——计算数据分散程度的相关函数

一、PERCENTIL函数 1.函数介绍 通常用来返回数据集给定百分点上的值。 2.函数解读 函数公式&#xff1a; PERCENTILE(数据, 百分点) 参数释义&#xff1a; 数据&#xff08;必填&#xff09;&#xff1a;待处理的数组或数据区域。 百分点&#xff08;必填&#xff09;&…...

详解如何使用Jenkins一键打包部署SpringBoot项目

目录 1、Jenkins简介 2、Jenkins的安装及配置 2.1、Docker环境下的安装​编辑 2.2、Jenkins的配置 3、打包部署SpringBoot应用 3.1、在Jenkins中创建执行任务 3.2、测试结果 1、Jenkins简介 任何简单操作的背后&#xff0c;都有一套相当复杂的机制。本文将以SpringBoot应…...

【JVM】内存区域划分、类加载机制(双亲委派模型图解)、垃圾回收(可达性分析、分代回收)

一、JVM简介 JVM (Java虚拟机) 是执行Java字节码的虚拟机。它是Java平台的核心&#xff0c;并且为Java代码提供了跨平台的能力。JVM 是一种虚拟的计算机&#xff0c;在其上运行的程序是Java字节码&#xff0c;它提供了Java代码在不同操作系统和硬件平台上执行的能力。JVM 将Ja…...

解决 requests 2.28.x 版本 SSL 错误

最近&#xff0c;在使用requests 2.28.1版本进行HTTP post传输时&#xff0c;您可能遇到了一个问题&#xff0c;即SSL验证失败并显示错误消息(Caused by SSLError(SSLCertVerificationError(1, [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get loc…...

hive数据质量规范

当谈到大数据处理和分析时&#xff0c;数据质量成为至关重要的因素。Hive作为一种常用的大数据查询和分析工具&#xff0c;也需要遵循一定的数据质量规范以确保数据的准确性、一致性和可靠性。本文将介绍Hive数据质量规范的相关内容&#xff0c;并提供代码示例来说明如何在Hive…...

Jenkinsfile+Dockerfile前端vue自动化部署

前言 本篇主要介绍如何自动化部署前端vue项目 其中&#xff0c;有两种方案&#xff1a; 第一种是利用nginx进行静态资源转发&#xff1b;第二种方案是利用nodejs进行启动访问&#xff1b; 各个组件版本如下&#xff1a; Docker 最新版本&#xff1b;Jenkins 2.387.3nginx …...

SQL server从安装到入门(一)

文章目录 彻底安装怎么安装&#xff1f;Polybase要求安装orcale jre 7更新 51或更高版本&#xff1f;安装完怎么配置&#xff1f;没有SSMS&#xff1f; 熟悉一下SMSS&#xff01; 根据本人实际安装和初步使用SQL server的过程中&#xff0c;经历的一些关键性的步骤和精品文章。…...

Unexpected WSL error错误处理备忘

运行docker时提示下图错误&#xff0c;看了下WSL好像没啥问题&#xff0c;看网上有人说需要重置下网络&#xff0c;命令是netsh winsock reset&#xff0c;重置完后果然好了...

计算机毕业设计 基于Vue的米家商城系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

Linux终端与交互式Bash

常用的Linux终端 GNOME Terminal&#xff1a;GNOME 桌面环境下的默认终端程序&#xff0c;支持多个选项卡和配置。Konsole&#xff1a;KDE 桌面环境下的默认终端程序&#xff0c;提供了丰富的功能和选项。Terminator&#xff1a;开源的终端程序&#xff0c;支持多个可调整大小…...

呕心整理的常用热门API大全

短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;3秒可达&#xff0c;99.99&#xff05;到达率&#xff0c;支持大容量高并发。通知短信&#xff1a;当您需要快速通知用户时&#xff0c;通知短信是最快捷有效的方式。短信…...

Redis7.2.3集群安装,新增节点,删除节点,分配哈希槽,常见问题

概念&#xff1a; 【Redis】高可用之三&#xff1a;集群&#xff08;cluster&#xff09; - 知乎 实操&#xff1a; Redis集群三种模式 主从模式 优势&#xff1a; 主节点可读可写 从节点只能读&#xff08;从节点从主节点同步数据&#xff09; 缺点&#xff1a; 当主节点…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...