zoukankan      html  css  js  c++  java
  • Django commands自定制

    什么是Django Commands

    Django 对于命令的添加有一套规范,你可以为每个app 指定命令。通俗一点讲,比如在使用manage.py文件执行命令的时候,可以自定制自己的命令,来实现命令的扩充。

    commands的创建

    1、在app内创建一个management的python目录
    2、在management目录里面创建commands的python文件夹
    3、在commands文件夹下创建任意py文件

    此时py文件名就是你的自定制命令,可以使用下面方式执行

    python manage.py 命令名

    撰写command文件要求 

    首先对于文件名没什么要求,内部需要定义一个Command类并继承BaseCommand类或其子类。

    文件结构

    其中help是command功能作用简介,handle函数是主处理程序,add_arguments函数是用来接收可选参数的

    简单测试

    # -*- coding: utf-8 -*-
    # __author__ = 'dandy'
    from django.core.management.base import BaseCommand
    
    class Command(BaseCommand):
        help = 'test'
    
        def handle(self, *args, **options):
            print('test')

    带参数的测试

    # -*- coding: utf-8 -*-
    # __author__ = 'dandy'
    from django.core.management.base import BaseCommand
    
    class Command(BaseCommand):
    
        def add_arguments(self, parser):
            parser.add_argument('aaa', nargs='+', type=int)
            parser.add_argument('--delete',
                                action='store_true',
                                dest='delete',
                                default=False,
                                help='Delete poll instead of closing it')
    
        def handle(self, *args, **options):
            print('test')
            print(args, options)

    options里面直接取参数就可以了。

     1 # -*- coding: utf-8 -*-
     2 # __author__ = 'dandy'
     3 from django.core.management.base import BaseCommand
     4 from django.conf import settings
     5 import requests
     6 import os
     7 import threading
     8 
     9 command_path = os.path.join(settings.BASE_DIR, 'api', 'management', 'commands')
    10 file = os.path.join(command_path, 'api_urls')
    11 
    12 
    13 class Command(BaseCommand):
    14     help = 'test cost time for each api when getting data .We have set a middleware and create a file for log.' 
    15            'here just send request by thread pool'
    16 
    17     def handle(self, *args, **options):
    18         url_list = []
    19         try:
    20             if not os.path.exists(file):
    21                 raise FileNotFoundError('ERROR!!!! no file named api_urls in %s' % file)
    22             with open (file, 'rb') as obj:
    23                 urls = obj.readlines()
    24                 if not len(urls):
    25                     raise Exception('ERROR!!! api_urls is a empty file !!')
    26                 for url in urls:
    27                     url = url.strip()
    28                     if url:
    29                         t = threading.Thread(target=self.get_url, args=(url,))
    30                         # t.setDaemon(True)  # set True and you don't need to wait until main thread finished
    31                         t.start()
    32             print('send all request successfully !')
    33         except Exception as e:
    34             print(e)
    35 
    36     def get_url(self, url):
    37         requests.get(url)
    实战1
    1 http://www.baidu.com
    2 http://www.qq.com
    api_urls
  • 相关阅读:
    grant授权“失败”的原因
    解决:error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
    3.MySQL之创建/删除用户
    Linux常用宏contianer_of()
    Linux设备模型(一)_基本概念
    内核探测工具systemtap简介
    模块驱动调试记录 ——platform_driver_register
    Linux软件栈上的性能诊断工具集
    系统调用—sysconf
    C的编译&预编译
  • 原文地址:https://www.cnblogs.com/wuzdandz/p/9724360.html
Copyright © 2011-2022 走看看