官网文档地址:编写自定义 django-admin 命令

  1. 金句:
  2. 你所浪费的今天,正是昨天死的人所期待的明天。

开篇话:

python manage.py <command> 的命令我们用了很多,要是我们想要使用一些特定的较长的命令时,比如:python manage.py test --keepdb --settings=appname.test_settings(命令作用:运行项目测试时,使用指定的配置文件),这时每次运行的就很麻烦,可以通过设定自定义manage.py命令来实现。

操作步骤要点:

第一步:新建自定义命令模块

在已有的项目中,在你要设置的项目app下,增加 management/commands目录,新建python模块,模块名不能以“_”开头,否则模块不会被设置为自定义命令。设置的自定义命令为模块的名字,创建好后的目录树如下:

  1. appname/ # django项目下的某个app
  2. __init__.py
  3. models.py
  4. management/
  5. commands/
  6. _private.py # 这模块不会被加入到自定义命令
  7. newtest.py # 这个模块会被设置为自定义命令,命令为模块名
  8. tests.py
  9. views.py
  1. 注意:添加自定义命令的app需要在`settings.py`INSTALLED_APPS中注册。

第二步:编写自定义命令功能

设置newtest.py要实现的功能,newtest.py的内容:

  1. import os
  2. import traceback
  3. from django.core.management.base import BaseCommand, CommandError
  4. class Command(BaseCommand):
  5. def add_arguments(self, parser):
  6. parser.add_argument(
  7. dest='appname', # 参数名字
  8. type=str, # 参数类型
  9. help='测试哪个app', # 帮助信息
  10. )
  11. def handle(self, *args, **options):
  12. try:
  13. shell_info ='python manage.py test %s --keepdb --settings=appname.test_settings' % (options['appname'])
  14. os.system(shell_info)
  15. self.stdout.write(self.style.SUCCESS('命令%s执行成功, 参数为%s' % (__file__, options['appname'])))
  16. except:
  17. self.stdout.write(traceback.format_exc())
  18. self.stdout.write(self.style.ERROR('命令执行出错'))

以上功能解释:执行python manage.py newtest appname时,就会调用test测试,并运行指定的测试专用settings.py配置。

  1. 注意: 要打印输出信息,要使用:`self.stdout.write("Unterminated line", ending='')``ending=''参数是指定输出信息后以什么结尾,不配置参数默认是换行符。`

如果各位有什么不明白的地方,可以留言回复。

本文首发于BigYoung小站

Django编写自定义manage.py 命令的更多相关文章

  1. 【Django】如何自定义manage.py命令? 达到启动后台进程的目的?

    代码: #-*- coding:utf- -*- """ The handle active user mail send """ from ...

  2. Django扩展自定义manage命令

    使用django开发,对python manage.py ***命令模式肯定不会陌生.比较常用的有runserver,migrate... 本文讲述如何自定义扩展manage命令. 1.源码分析 ma ...

  3. django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令

    1.安装python3 2.设置python3的环境变量 3.进入命令行模式,输入 pip install django 1.10.3 4.验证是否安装完成 pip show django 5.dja ...

  4. python后台架构Django教程——manage.py命令

    一.manage.py命令选项 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行.manage.py接受的是Django提供的内置命令. 内 ...

  5. django实现自定义manage命令的扩展

    在Django开发过程中我们都用过django-admin.py和manage.py命令. django-admin.py是一个命令行工具,可以执行一些管理任务,比如创建Django项目.而manag ...

  6. Django manage.py 命令详解

    manage.py 查看命令的作用的语句 C:\Users\Administrator> python manage.py help Type 'manage.py help <subco ...

  7. Django 编写自定义的 404 / 500 报错界面

    Django 编写自定义的 404 / 500 报错界面 1. 首先 setting.py 文件中的 debug 参数设置成 false ,不启用调试. DEBUG = False 2. 在 temp ...

  8. 为django的python manage.py加自定义命令

    计划在开发软件的过程中, 每次可以自己加入测试数据,这样就可以每次作全新的测试了. 将这个初始化django modules数据命令,将在manage.py里是最合适的. 下面我们就来实现吧. 参考文 ...

  9. django 运行python manage.py sqlall books 时报错 app has migration

    出现这个问题的原因是版本之前的不兼容,我用的django版本是1.8.6 而 这条python manage.py sqlall books 是基于django1.0版本的. 在django1.8.6 ...

随机推荐

  1. IOS 手动添加第三方库报错问题

    当不想使用CocoaPods来管理和使用第三方库的时候,就需要手动添加和配置这些第三方库,难免会出现一些问题,主要问题汇总如下: 1.AFNetworking.NKNetWork.ZxingObjC等 ...

  2. jdk下httpserver源码解析

    在写这篇博客之前我查了很久发现全网都没有一篇写httpserver源码解析的 所以今天就由我来为大家解析一下httpserver的源码.(这里我会去掉其中的https部分的源码,只讲http部分,对h ...

  3. [poj1797]Heavy Transportation<最大生成树prim&kruskal>

    题目链接:http://poj.org/problem?id=1797 题意:给定n个点,m条边,每条边连接两点切有权值.求点1到点n的路径的上的最小边的值最大... 翻别人博客找到的题,方法挺多的, ...

  4. B【SDOI2008】Sandy的卡片

    时间限制 : 5000 MS   空间限制 : 128000 KB 问题描述 Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片 ...

  5. 1642: 【USACO】Payback(还债)

    1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...

  6. STM32F103ZET6外部中断

    1.EXTI功能 外部中断/事件控制器EXTI管理了STM32的20个中断/事件线. EXTI的功能框图如下: 在功能框图中,可以看到很多在信号线上打了一个斜杠并标注“20”的字样,这是表示在STM3 ...

  7. 《Three.js 入门指南》3.1.1 - 基本几何形状 - 球体(SphereGeometry)

    3.1 基本几何形状 球体(SphereGeometry) 构造函数: THREE.SphereGeometry(radius, segmentsWidth, segmentsHeight, phiS ...

  8. Centos装机预备技能

                                                               装机预备技能 1.1问题 本例要求安装一台可用的KVM服务器: RHEL与Cent ...

  9. python 面向对象反射以及内置方法

    一.反射 什么是反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),python中一切皆对象,都可以使用放射. 反射的四种方法: hasattr:hasattr(objec ...

  10. Python 的while循环和for循环的使用

    #循环 遍历 迭代 # while循环 a = 0while a <5: a =a+1 if a == 3: continueprint('我循环了')+str(a) # print ('我循环 ...