django编写自定义的脚本文件

介绍

每个app下都可以有一个management/commands目录。Django将manage.py为该目录中每个名称都不以下划线开头的Python模块注册一个命令。官网

该模块mytest.py只有一个需求–它必须定义一个类 Command并继承BaseCommand或其 子类之一。

mytest.py如下:

from django.core.management.base import BaseCommand, CommandError
from polls.models import Question as Poll

class Command(BaseCommand):
    help = 'Closes the specified poll for voting'
    # 添加额外的参数
    def add_arguments(self, parser):
        parser.add_argument('poll_ids', nargs='+', type=int)
    # 重写父类的handle方法,继承BaseCommand必须重写该方法,该方法就是执行的代码
    def handle(self, **options):
        for poll_id in options['poll_ids']:
            try:
                poll = Poll.objects.get(pk=poll_id)
            except Poll.DoesNotExist:
                raise CommandError('Poll "%s" does not exist' % poll_id)

            poll.opened = False
            poll.save()

            self.stdout.write(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))

使用python manage.py mytest来执行该脚本文件

Command对象

BaseCommand

继承该类必须重写handle方法。

属性

  • BaseCommand.help

    该命令的简短描述,当用户运行该命令时,它将显示在帮助消息中 。python manage.py help <command>

  • BaseCommand.missing_args_message

    如果您的命令定义了必需的位置参数,则可以自定义在缺少参数的情况下返回的消息错误。默认输出为argparse(“参数过多”)。

  • BaseCommand.output_transaction

    指示命令是否输出SQL语句的布尔值;如果 True,输出将自动用BEGIN;和 包装COMMIT;。默认值为False

  • BaseCommand.requires_migrations_checks

    一个布尔值;if True,如果磁盘上的迁移集与数据库中的迁移不匹配,则该命令将显示警告。警告不会阻止命令执行。默认值为False

  • BaseCommand.requires_system_checks

    一个布尔值;如果为True,则在执行命令之前将检查整个Django项目是否存在潜在问题。默认值为True

  • BaseCommand.style

    实例属性,可在写入stdout或时帮助创建彩色输出 stderr。例如:self.stdout.write(self.style.SUCCESS(‘...‘))

方法

BaseCommand 有很多方法可供重写,不过仅有 handle() 是必须实现的。

子类中实现构造器

BaseCommand 的子类实现了 __init__ 方法,那么就必须调用 BaseCommand__init__

class Command(BaseCommand):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # ...
  • BaseCommand.handle(*args, **options) 重要

    命令的实际逻辑处理。子类必须实现此方法。此方法可能会返回一个字符串,输出至 stdout (若 output_transactionTrue,则由 BEGIN;COMMIT 包裹)。

  • BaseCommand.create_parser(prog_name, subcommand, **kwargs)

    返回一个 CommandParser 实例,它是 ArgumentParser 的子类,包含一些针对 Django 的个性化设计。你可以自定义这个实例,通过重写此方法,并为 super() 方法传入值为 ArgumentParserkwargs 参数。

  • BaseCommand.add_arguments(parser)

    添加命令行转换参数的入口,用于处理传给命令行的参数。自定义命令需要重写此方法,并同时添加命令接受的位置参数和可选参数。直接使用 BaseCommand 的子类时无需调用 super()

  • BaseCommand.get_version()

    返回 Django 版本,内置 Django 命令必须正确返回。用户实现的命令可以重写此方法返回自己的版本。

  • BaseCommand.execute(*args, **options)

    试着执行此命令,如果需要的话,进行系统检查(由 requires_system_checks 控制)。若命令抛出 CommandError,这会导致命令中断,并将错误输出至 stderr。

  • BaseCommand.check(app_configs=None, tags=None, display_num_errors=False)

    利用系统检查框架校验 Django 项目是否存在隐含的问题。严重的问题会抛出 CommandError;警告会输出至 stderr;次要通知输出至 stdout。若 app_configstags 均为 None,所以的系统检查项都会被运行。tags 能是一个检查标签的列表,例如 compatibilitymodels

BaseCommand子类

AppCommand

管理命令接受一个或多个应用标签参数,并对每项应用做某些事。

子类必须实现 handle_app_config(),而不是 handle()。此方法会为每个应用调用一次。

  • AppCommand.handle_app_config(app_config, **options)

    app_config 运行命令,这会是 AppConfig的实例,并指向命令行给定的应用标签。

LabelCommand

一个管理命令,从命令行接受一个或任意多个参数(labels),并针对每项做些事情。

子类必须实现 handle_label(),而不是 handle()。此方法会为每个应用调用一次。

  • LabelCommand.label

    一个字符串,介绍了传递给命令的任意多个参数。此字符串用于命令的用法文本和错误消息。默认为 ‘label‘

  • LabelCommand.handle_label(label, **options)

    运行 label 指定的命令动作,由命令行传入的字符串。

原文地址:https://www.cnblogs.com/liuweida/p/12241157.html

时间: 2024-10-05 05:04:39

django编写自定义的脚本文件的相关文章

django 组件 自定义标签 静态文件配置

组件 将一些功能标签写在一个html文件里,这个文件作为一个组件,如果那个文件需要就直接拿过来使用即可: 这是title.html文件,写了一个导航栏,作为一个公用的组件 <div style="background-color: cyan;width: 100%;height: 40px;"> <span style="font-size: 20px;">首页</span> <span style="font-s

自己编写的.sh脚本文件运行完闪退解决方案

gnome-terminal设置如下图: 直接原因是,“命令退出时:退出终端”造成的!! 解决方案如下: 1. Ctrl + Alt + F1 ,进入文本操作模式: 2. 登录后,执行:yum install Terminal (注意:Terminal 首字母必须大写): 3.安装完成后,按 Ctrl + Alt + F7 回到桌面操作界面: 4.在“应用程序”菜单栏中找到 “终端” (注意此时系统中有两个终端,打开刚刚安装的那个)打开: 5.执行 gnome-terminal   -x  mu

Struct2学习:struts.xml引入自定义的xml文件

随着项目代码的增多,用一个structs.xml来管理所有功能模块的Action未免显得臃肿且结构不清晰,因此可以根据实际的功能划分,将各模块的Action放在自定义的xml文件中,再引入struts.xml文件中. 文件目录如下: 1.编写自定义的xml文件my-struct.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Sof

django “如何”系列4:如何编写自定义模板标签和过滤器

django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码布局 自定义标签和过滤器必须依赖于一个django app,也就是说,自定义标签和过滤器是绑定app的.该app应该包含一个templatetags目录,这个目录一个和model.py,views.py在同一个层级,记得在该目录下建立一个__init__.py文件一遍django知道这是一个pyth

django之创建第3个项目:编写第一个模板文件

1.django结构 2.在站点blog下创建templates文件夹,专门用于存放模板文件 3.在templates文件夹下创建index.html文件 #index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>第一个模板文件</title> </head> <body&

2016.4.6 链接器脚本文件的编写

1.链接器脚本文件的组成: 基本构成:段:代码段.text     数据段.data    bss段 .bss 起始链接地址 对齐 变量 代码段首文件 2.实例文件: SECTIONS{ . = 0x0;  //设置程序起始链接地址,=左右两边要空格 . = ALIGN(4);//,设置代码段四字节对齐,=左右两边要空格 .text ://冒号前要空格 { start.o(.text)//设置代码段首文件,CPU一上电就开始执行. *(.text) } . = ALIGN(4);//设置数据段四

Django中自定义过滤器的使用

我在这里做的是: 从数据库查出id递增的一些信息,展示在前台. 编写一个过滤器判断查出数据的id是偶数的返回True 奇数返回False 1 创建项目,创建应用,注册应用,配置settings.py文件,配置urls映射,编写views试图,编写模板templates,编写models模块 切记 注册应用.  很多伙伴找不到自己定义的过滤器,是因为忘记注册应用! 2 创建过滤器的目录: 实际上,在项目目录或者应用目录下创建都是可以的,创建一个名为templatetags的python模块 在我这

【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

转载自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括,如果你的项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台,这时候你的上架时候是个不确定的时候,具体什么时候能上架,主要跟平台有关,你再着急,也没有用的. 那么如果你的项目是使用脚本语言进行

编写无Java脚本的JSP页面

在上一章中总结了Web开发中应用MVC架构模式,将Servlet 用做控制器,JSP作为视图,JavaBean作为模型,实现业务流程控制,页面逻辑和业务逻辑的分离.然而,使用前面的技术实现MVC,并不是最完美的. 在当代的一个最佳的JavaWeb开发实践就是在MVC架构模式中,中和使用JavaBean,EL(expression language),JSP自定义标记库以及JSP标准标记库JSTL,编写无java脚本的JSP页面. 一 JSP表达式语言EL 在使用基于MVC架构模式的Web应用开发