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

django项目中如何添加自定义的django command

项目目录

1.我们自己建立的application叫做app,首先在这个app目录下,我们需要新建management目录,这个目录里应该包括:__ init__.py(内容为空,用于打包)和commands目录,然后在commands目录下包括:__ init__.py和mycommand.py ,其中 mycommand.py就是用于我们自定义command的方法,目录的树状结构如下:
在这里插入图片描述
2. app下的mycommand.py的command内容书写,简单示例如下

from django.core.management.base import BaseCommandclass Command(BaseCommand):# handle()该方法必须实现def handle(self, *args, **options):print("这是app下面的mycommand命令")

我们把BaseCommand类关联进来,使用command类和handle方法来作为框架,如上,这个command实现的就是打印 “这是app下面的mycommand命令”.
通过以上 我们就可以使用python manage.py mycommand 的方式来运行我们自己的django命令了。
app2/management/commands下的文件名是:mycommand02.py

使用cron来定期执行django command

将django command我写了一个简单的shell脚本:

#!/usr/bin/env bashp=$PWD
touch $p/djangocron.cron
touch $p/djangocron.log
touch $p/djangocron02.log
echo "*/1 * * * * python3 $p/manage.py mycommand >> $p/djangocron.log 2>&1" >> djangocron.cron
echo "*/1 * * * * python3 $p/manage.py mycommand02 >> $p/djangocron02.log 2>&1" >> djangocron.cron
crontab djangocron.cron
crontab -l

解释一下:

这个脚本放在与manage.py同一目录下,以便p=$PWD获取能用的当前路径。
touch先建立一个djangocron.cron文件,用于存放crontab的命令,建立的djangocron.log和djangocron02.log用来存输日志信息。

*/1 * * * * python3 $p/manage.py mycommand >> $p/djangocron.log 2>&1

这一句写入djangocron.cron文件,就是cron的配置了 */1 * * * *这几个参数未改动的格式是 * * * * * 五个参数使用空格隔开分别表示 分钟 小时 天 月 周,我这里的配置就是每分钟执行后面的命令;

后面的命令 python $p/manage.py mycommand,$p是路径的引用,其实就是 python manage.py mycommad. 

小箭头 >> $p/djangocron.log 2>&1的意思就是 将命令的输出结果追加到djangocron.log文件,2>&1的意思是同时将错误信息也存入djangocron.log文件。

crontab djangocron.cron的作用是将我们写的djangocron.cron文件在crontab中装载,装载后可以:

crontab -l #查看
crontab -e #修改

只要调整cron前面设置的时间参数,就可以测试自己的命令有没有成功执行,查看djangocron.log来查看输出和error。

参考文档

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

相关文章:

  • 【算法基础】哈希表⭐⭐⭐
  • 基于SpringMVC、Spring、MyBatis开发的校园点餐系统
  • LeetCode 热题 C++ 148. 排序链表 152. 乘积最大子数组 160. 相交链表
  • JavaScript 基础【快速掌握知识点】
  • 基于Frenet优化轨迹的⾃动驾驶动作规划⽅法
  • Spring(入门)
  • 2023-02-25力扣每日一题
  • 如何外网登录管理云通信短信网关平台?——快解析映射方案
  • 学习 Python 之 Pygame 开发魂斗罗(三)
  • 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)
  • linux系统加exfat驱动
  • 3,预初始化(一)(大象无形9.2)
  • 【PAT甲级题解记录】1013 Battle Over Cities (25 分)
  • CSS-关键帧动画
  • Allegro如何画Photoplot_Outline操作指导
  • ChatGPT对于普通人有什么机会和影响?
  • 【人工智能 AI】可以从 RPA 中受益的 10 个行业 10 Industries That Can Benefit From RPA
  • PHP 程序如何实现加密解密?
  • 使用IDEA社区版如何创建SpringBoot项目?
  • HTML、CSS学习笔记3(平面转换:位移、旋转、缩放,渐变)
  • 【C语言经典例题】打印菱形
  • easyExcel与poi版本不兼容导致的后台报错问题
  • Fiddler报文分析-断点应用、模拟网络限速-HTTPS的 拦截
  • PHP基础(3)
  • 跳槽进字节跳动了,面试真的很简单
  • 【SpringBoot9】HandlerInterceptor拦截器的使用 ——防重复提交
  • 内网渗透(五十八)之域控安全和跨域攻击-约束性委派攻击
  • Linux僵尸进程理解作业详解
  • 每日一题——L1-078 吉老师的回归(15)
  • ESP32设备驱动-DS1264数字温度传感器驱动