Django-------自定义命令

这篇具有很好参考价值的文章主要介绍了Django-------自定义命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

每次在启动Django服务之前,我们都会在终端运行python manage.py xxx的管理命令。其实我们还可以自定义管理命令,这对于执行独立的脚本或任务非常有用,比如清除缓存、导出用户邮件清单或发送邮件等等。

自定义的管理命令不仅可以通过manage.py运行,还可以通过Linux或Celery的crontab服务将其设成定时任务。本文主要讲解如何自定义Django-admin命令,并提供一些演示案例。

 自定义Django-admin命令一共分三步:创建文件夹布局、编写命令代码和测试使用。

 1.创建文件夹布局

自定义的Django-admin管理命令本质上是一个python脚本文件,它的存放路径必须遵循一定的规范,一般位于app/management/commands目录。整个文件夹的布局如下所示:

 app01/
     __init__.py
     models.py
     management/          #在app下创建management包
         __init__.py
         commands/         #在management包下创建commands包
             __init__.py
             _private.py # 以下划线开头文件不能用作管理命令
             my_commands.py # 这个就是自定义的管理命令脚本,文件名即为命令名
     tests.py
     views.py

 

注意:

  • management和commands每个目录下都必须有个__init__.py空文件,表明这是一个python包。另外以下划线开头的文件名不能用作管理命令脚本。
  • management/commands目录可以位于任何一个app的目录下,Django都能找到它。
  • 一般建议每个python脚本文件对应一条管理命令。

 2.编写命令代码

每一个自定义的管理命令本质是一个Command类, 它继承了Django的Basecommand或其子类, 主要通过重写handle()方法实现自己的业务逻辑代码,而add_arguments()则用于帮助处理命令行的参数,如果运行命令时不需要额外参数,可以不写这个方法。

 from django.core.management.base import BaseCommand
 
 class Command(BaseCommand):
     # 帮助文本, 一般备注命令的用途及如何使用。
     help = 'Some help texts'
 
     # 处理命令行参数,可选
     def add_arguments(self, parser):
        pass
 
     # 核心业务逻辑
     def handle(self, *args, **options):
         pass

实际应用场景

        案例1:检查数据库连接是否已就绪

无论你使用常规方式还是Docker在生产环境中部署Django项目,你需要确保数据库连接已就绪后才进行数据库迁移(migrate)的命令(Docker-compose的depends选项并不能确保这点),否则Django应用程序会出现报错。

这时你可以自定义一个wait_for_db的命令,如下所示:

 # app/management/commands/wait_for_db.py
 import time
 from django.db import connections
 from django.db.utils import OperationalError
 from django.core.management import BaseCommand
 
 
 class Command(BaseCommand):
     help = 'Run data migrations until db is available.'
 
     def handle(self, *args, **options):
         self.stdout.write('Waiting for database...')
         db_conn = None
         while not db_conn:
             try:
                 # 尝试连接
                 db_conn = connections['default']
             except OperationalError:
                 # 连接失败,就等待1秒钟
                 self.stdout.write('Database unavailable, waiting 1 second...')
                 time.sleep(1)
 
         self.stdout.write(self.style.SUCCESS('Database available!'))

 命令: python manage.py wait_for_db

案例2:周期性发送邮件文章来源地址https://www.toymoban.com/news/detail-631562.html

到了这里,关于Django-------自定义命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一周学会Django5 Python Web开发-Django5路由定义

    锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计22条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、

    2024年02月19日
    浏览(50)
  • windows解决python安装django架构没有django-admin命令

    目录 一.尝试安装与配置 1.直接pip命令安装 2.用pycharm测试 3.官网下包安装 二.解决 1.找到django安装的路径 2.配置系统变量 3.测试创建项目 3.1.执行访问页面 3.2.解决 3.3.继续测试 4.pycharm打开     新建项目测试    注:发现没有django这个框架选项,后面发现这个功能只有专业版才

    2024年02月06日
    浏览(50)
  • Python智能家居系统后端源码,基于Django+MQTT+ESP8266的智能家居系统源码

    代码下载地址:Python智能家居系统后端源码 服务器硬件环境: 处理器:Intel® Xeon® CPU E5-2680 v4 @ 2.40GHz 1核 内存:2GB 硬盘空间:60GB 单片机环境: 单片机:ESP8266-12E NodeMCU 开发环境:Arduino IDE(1.8.19) 软件环境: 操作系统:Ubuntu 18.04 LTS 编程语言:Python(3.7.9) Web后端框架:

    2024年02月02日
    浏览(57)
  • Django后端开发——Django应用及分布式路由

    B站网课:点击蓝色字体跳转 或者复制链接在浏览器打开:https://www.bilibili.com/video/BV1vK4y1o7jH?p=14vd_source=597e21cf34ffcdce468ba00be2177e8a 终端: 在settings.py的INSTALLED_APPS中添加应用名即可 news开头的交由news管理 music开头的交由music管理 Step1 - 主路由中调用include函数 语法:include(‘app名

    2024年02月19日
    浏览(55)
  • 【后端】Django与Django REST Framework的结合使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发语言,本文主要介绍Django与Django REST Framework的结合使用。 创建Django项目通常包括以下步骤: 安装Django : 首先,确保你的

    2024年04月26日
    浏览(35)
  • Django后端开发——静态文件

    B站网课:点击蓝色字体跳转 或者复制网址在浏览器访问:https://www.bilibili.com/video/BV1vK4y1o7jH?p=13vd_source=597e21cf34ffcdce468ba00be2177e8a 如:图片、css、js、音频、视频 以下一行代码是手动添加的,指定了一个目录——‘static’,将在该目录下查找静态文件 模板中访问静态文件 - im

    2024年02月19日
    浏览(104)
  • 二挡起步——pythonweb开发Django框架,前端原生+Django后端框架002(附带小案例)

     大家好,我是csdn的博主: lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主 lqj_本人擅长微信小程序,前端,python,等方面的知识 https://blog.csdn.net/lbcyllqj?spm=1011.2415.3001.5343 哔哩哔哩欢迎关注: 小淼Develop 小淼Develop的个人空间-小淼Develop个

    2024年02月03日
    浏览(71)
  • 【Django】 python manage.py makemigrations & python manage.py migrate命令解答及不能新建表解决方法

    1、作用于全局 python manage.py makemigrations 表示通知Django即将做什么,并做一个记录,实际上并没有做 python manage.py migrate  真正开始创建数据库 2、作用于app或文件 需要注意的是这两个命令默认情况下是作用于 全局 ,也就是对所有最新更改的models或者 migrations下面的迁移文件进

    2024年02月04日
    浏览(43)
  • Django proxy_view代理后端

    某些需求下,需要通过Django代理后端,比如开发celery定时任务时候,需要代理后端的flower,代理后端可以直接使用Django自带的授权,方便权限控制 具体操作如下 1.安装 django-proxy 包,进行代理 2.编写view,用与代理后端flower settings.py中添加下面配置  flower.py文件如下 添加url路

    2024年02月12日
    浏览(43)
  • Django后端开发——模型层及ORM介绍

    B站网课:点击蓝色字体跳转 或者复制链接到浏览器打开:https://www.bilibili.com/video/BV1vK4y1o7jH?p=15vd_source=597e21cf34ffcdce468ba00be2177e8a 一般都有python3-dev,没有default-libmysqlclient-dev,需要安装default-libmysqlclient-dev 然后安装mysqlclient 若安装default-libmysqlclient-dev时报错‘pkg-config: not found’

    2024年02月19日
    浏览(109)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包