日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Django執行指定腳本的幾種方法_python

作者:knktc ? 更新時間: 2022-04-14 編程語言

前言

用Django寫項目,遇到臨時需要處理數據庫的問題時,會考慮直接讓腳本在項目環境中運行,這樣就可以直接用定義好的模型和方法了。

這里提供幾種方法,通過Django執行指定的腳本,讓腳本直接在Django項目的環境中來運行。

Django Shell

Django自帶的shell其實就加載了項目的各種環境變量,網上描述得也很多,直接這么跑就可以了:

python manage.py shell < script.py

簡單是非常簡單,不足的地方就是不好加參數進去,而且喜歡寫main的話也不好讓腳本跑起來。

自定義Command

也可以通過自定義一個簡單的command來實現需要的效果,以下是最近寫的一個示例,可支持執行指定的腳本文件,同時還能加入更多的腳本執行參數:

"""
@author:knktc
@contact:me@knktc.com
"""

import os
import sys
import argparse
from django.core.management.base import BaseCommand


class Command(BaseCommand):
    help = 'Run script in current project environment'

    def add_arguments(self, parser):
        parser.add_argument('script', type=str, nargs=argparse.REMAINDER,
                            help='script file path and args')

    def handle(self, *args, **options):
        # get args
        args = options['script']
        script_path = args[0]

        # check file existence
        if not os.path.isfile(script_path):
            self.stderr.write(f'No such file: [{script_path}]')
            sys.exit(1)

        # set args
        sys_argv = [script_path] + args[1:]
        sys.argv = sys_argv

        # run
        with open(script_path, 'r') as f:
            exec(f.read(), {'__name__': '__main__'})

把這段代碼放到任意app的management/commands目錄下,命名為run_script.py即可,此后就可以一勞永逸地使用這個自定義的命令了。

此后,運行指定的腳本可參考以下的命令:

python manage.py run_script your_script arg1 arg2 -v arg3

Django extensions

此外還可以通過django-extensions這個包內置的runscript來實現,這個方法可參考文檔:https://django-extensions-zh.readthedocs.io/zh_CN/latest/runscript.html

總結

原文鏈接:https://knktc.com/2020/10/01/django-run-script/

欄目分類
最近更新