最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解django實現(xiàn)自定義manage命令的擴展

 更新時間:2019年08月13日 08:25:37   作者:迎風而來  
這篇文章主要介紹了django實現(xiàn)自定義manage命令的擴展,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在Django開發(fā)過程中我們都用過django-admin.py和manage.py命令。

django-admin.py是一個命令行工具,可以執(zhí)行一些管理任務(wù),比如創(chuàng)建Django項目。而manage.py是在創(chuàng)建每個Django project時自動添加在項目目錄下的,只是對manage.py的一個簡單包裝,其功能是將Django project放到sys.path目錄中,同時設(shè)置DJANGO_SETTINGS_MODULE環(huán)境變量為當前project的setting.py文件。

Django 對于命令的添加有自己的一套規(guī)范,我們可以為每個app 指定命令。簡單來書就是我們在使用manage.py文件執(zhí)行命令的時候,可以自定制自己的命令,來實現(xiàn)命令的擴充。

對于自定義Command我們從兩方面介紹一是內(nèi)部執(zhí)行原理,二是如何實行自定義Command

一、內(nèi)部原理實現(xiàn)

django-admin.py調(diào)用django.core.management來執(zhí)行命令:

創(chuàng)建django項目會自動生成manage.py文件:

import os
import sys


def main():
  os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gaoyou.settings')
  try:
    from django.core.management import execute_from_command_line
  except ImportError as exc:
    raise ImportError(
      "Couldn't import Django. Are you sure it's installed and "
      "available on your PYTHONPATH environment variable? Did you "
      "forget to activate a virtual environment?"
    ) from exc
  execute_from_command_line(sys.argv)


if __name__ == '__main__':
  main()

excute_from_command_line()函數(shù)會根據(jù)命令行參數(shù)解析出命令的名稱,根據(jù)命令名稱調(diào)用相應(yīng)的Command執(zhí)行命令。Command位于各個管理模塊的commands模塊下面。

commands的創(chuàng)建方法:

1、在app內(nèi)創(chuàng)建一個名字為:management文件夾(在你自己指定的應(yīng)用下創(chuàng)建即可)
2、在management文件夾里面創(chuàng)建名為:commands的文件夾
3、在commands文件夾下創(chuàng)建名為:任意py文件(啟動的時候就是根據(jù)該文件名進行啟動的,注意:commands目錄內(nèi)都包含__init__.py文件)

此時py文件名就是你的自定制命令,我們可以使用下面方式進行執(zhí)行

python manage.py 命令名(即任意py文件名不用加.py)
#類似我們遷移數(shù)據(jù)庫命令
#python manage.py makemigrations
#python manage.py migrate

所謂管理模塊,是指在app模塊下的名字為management的模塊。Django通過

django.core.management.find_management_module函數(shù)發(fā)現(xiàn)"管理模塊":

django.core.management.find_management_module()
def find_management_module(app_name):
  """
  Determines the path to the management module for the given app_name,
  without actually importing the application or the management module.

  Raises ImportError if the management module cannot be found for any reason.
  """
  parts = app_name.split('.')
  parts.append('management')
  parts.reverse()
  part = parts.pop()
  path = None

然后通過django.core.management.find_commands函數(shù)找到命令類。find_commands函數(shù)會在管理模塊下查找.py文件,并將.py文件的名稱匹配到命令名稱:

def find_commands(management_dir):
  """
  Given a path to a management directory, returns a list of all the command
  names that are available.

  Returns an empty list if no commands are defined.
  """
  command_dir = os.path.join(management_dir, 'commands')
  try:
    return [f[:-3] for f in os.listdir(command_dir)
      if not f.startswith('_') and f.endswith('.py')]
  except OSError:
  return []

最后,通過django.core.management.load_command_class函數(shù)加載該.py文件中的Command類:

def load_command_class(app_name, name):
  """
  Given a command name and an application name, returns the Command
  class instance. All errors raised by the import process
  (ImportError, AttributeError) are allowed to propagate.
  """
  module = import_module('%s.management.commands.%s' % (app_name, name))
  return module.Command()

在執(zhí)行命令的時候,會執(zhí)行相應(yīng)Command類的handle方法。所有的Command類都應(yīng)該是django.core.management.base.BaseCommand的直接或間接子類。

二、自定義應(yīng)用

Django的Command命令是要放到我們創(chuàng)建app下的management/commands目錄下的( 需自己手動創(chuàng)建該文件目錄 )。

注意:請確保management/commands目錄下包含 __init__.py 文件

首先對于文件名可以自行定義沒有要求,內(nèi)部需要定義一個Command類并繼承BaseCommand類或其子類。

  1. 它必須定義一個Command類并擴展自BaseCommand或其 子類。
  2. 其中help是command功能作用簡介,handle函數(shù)是主處理程序,add_arguments函數(shù)是用來接收可選參數(shù)的( 如果沒有參數(shù)該方法可以不寫 )

我們通過在輸入命令后再控制臺輸出一個hello world為例:

task.py

from django.core.management.base import BaseCommand, CommandError
from django.db import models

class Command(BaseCommand):
  help = '每日凌晨對當天數(shù)據(jù)庫進行更新'

  def handle(self, *args, **options):
    print('hello world')

在Terminal控制臺將目錄切換到你創(chuàng)建的Django項目目錄下執(zhí)行: python manage.py task

執(zhí)行后即可在控制臺看到輸出hello world 說明自定義Commond成功?。?!

如果在輸入命令想要輸出參數(shù)怎么辦呢?例如: python mange.py task 參數(shù)

task.py

from django.core.management.base import BaseCommand, CommandError
from django.db import models


class Command(BaseCommand):
  help = '每日凌晨對當天數(shù)據(jù)庫進行更新'

  # 接收參數(shù)
  def add_arguments(self, parser):
    parser.add_argument('offset', type=int, help='天數(shù)轉(zhuǎn)移量')

  def handle(self, *args, **options):
    offset = options['offset'] # 拿到參數(shù)的值
    print(offset)
    print('hello world')
    self.stdout.write(self.style.SUCCESS('{} Successfully {}'.format('接收成功', offset))) #可以自定制在控制臺輸出的內(nèi)容

在Terminal控制臺將目錄切換到你創(chuàng)建的Django項目目錄下執(zhí)行: python manage.py task  1314

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

  • python3.6的字符串處理f-string的使用技巧分享

    python3.6的字符串處理f-string的使用技巧分享

    在這篇文章中講解了F字符串的基礎(chǔ)使用,對于F字符串有著很多的使用技巧,在這篇文章中你會見識到更多的F字符串的使用技巧,下面小編將介紹python3.6?的字符串處理f-string的使用技巧,需要的朋友可以參考下
    2024-02-02
  • 詳解Python如何在Web環(huán)境中使用Matplotlib進行數(shù)據(jù)可視化

    詳解Python如何在Web環(huán)境中使用Matplotlib進行數(shù)據(jù)可視化

    數(shù)據(jù)可視化是數(shù)據(jù)科學和分析中一個至關(guān)重要的部分,它能幫助我們更好地理解和解釋數(shù)據(jù),在現(xiàn)代應(yīng)用中,越來越多的開發(fā)者希望能夠?qū)?shù)據(jù)可視化結(jié)果展示在網(wǎng)頁上,本文將介紹如何在 Web 環(huán)境中使用 Matplotlib 進行可視化,包括基本概念、集成方式以及實用示例
    2024-11-11
  • LyScript實現(xiàn)繞過反調(diào)試保護的示例詳解

    LyScript實現(xiàn)繞過反調(diào)試保護的示例詳解

    LyScript插件中內(nèi)置的方法可實現(xiàn)各類反調(diào)試以及屏蔽特定API函數(shù)的功能,這類功能在應(yīng)對病毒等惡意程序時非常有效。本文為大家提供了LyScript實現(xiàn)繞過反調(diào)試保護的示例代碼,感興趣的可以了解一下
    2022-08-08
  • Python 訪問限制 private public的詳細介紹

    Python 訪問限制 private public的詳細介紹

    在一個模塊中,我們可能會定義很多函數(shù)和變量。這篇文章主要介紹了Python 訪問限制 private public的詳細介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 使用Python創(chuàng)建LNK文件選擇器并導出配置文件

    使用Python創(chuàng)建LNK文件選擇器并導出配置文件

    在這篇博客中,我將介紹如何使用Python的wxPython庫開發(fā)一個GUI應(yīng)用程序,該應(yīng)用程序可以選擇文件夾中的.lnk(快捷方式)文件,并將選中的文件導出為特定格式的buttons.ini配置文件,需要的朋友可以參考下
    2025-01-01
  • Python自動化開發(fā)學習之三級菜單制作

    Python自動化開發(fā)學習之三級菜單制作

    這篇文章主要為大家詳細介紹了Python自動化開發(fā)學習之三級菜單的制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Python 字典dict使用介紹

    Python 字典dict使用介紹

    這篇文章主要介紹了Python 字典dict使用介紹,需要的朋友可以參考下
    2014-11-11
  • python實現(xiàn)csdn全部博文下載并轉(zhuǎn)PDF

    python實現(xiàn)csdn全部博文下載并轉(zhuǎn)PDF

    我們學習編程,在學習的時候,會有想把有用的知識點保存下來,我們可以把知識點的內(nèi)容爬下來轉(zhuǎn)變成pdf格式,方便我們拿手機可以閑時翻看,是很方便的,本文就介紹一下如何實現(xiàn)
    2021-06-06
  • 在Python中append以及extend返回None的例子

    在Python中append以及extend返回None的例子

    今天小編就為大家分享一篇在Python中append以及extend返回None的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 最新評論

    建阳市| 阳东县| 确山县| 宝鸡市| 鹰潭市| 治多县| 桐梓县| 灵丘县| 漳平市| 肥城市| 长沙市| 宜都市| 平昌县| 天柱县| 那坡县| 江孜县| 铜梁县| 丽江市| 绵竹市| 罗平县| 阿克苏市| 昌江| 阆中市| 佛山市| 临泉县| 东至县| 唐海县| 南川市| 通榆县| 措美县| 平顶山市| 临泉县| 大港区| 什邡市| 南乐县| 容城县| 宝兴县| 闵行区| 炉霍县| 额尔古纳市| 博湖县|