Django執(zhí)行指定腳本的幾種方法
前言
用Django寫項(xiàng)目,遇到臨時(shí)需要處理數(shù)據(jù)庫的問題時(shí),會考慮直接讓腳本在項(xiàng)目環(huán)境中運(yùn)行,這樣就可以直接用定義好的模型和方法了。
這里提供幾種方法,通過Django執(zhí)行指定的腳本,讓腳本直接在Django項(xiàng)目的環(huán)境中來運(yùn)行。
Django Shell
Django自帶的shell其實(shí)就加載了項(xiàng)目的各種環(huán)境變量,網(wǎng)上描述得也很多,直接這么跑就可以了:
python manage.py shell < script.py
簡單是非常簡單,不足的地方就是不好加參數(shù)進(jìn)去,而且喜歡寫main的話也不好讓腳本跑起來。
自定義Command
也可以通過自定義一個(gè)簡單的command來實(shí)現(xiàn)需要的效果,以下是最近寫的一個(gè)示例,可支持執(zhí)行指定的腳本文件,同時(shí)還能加入更多的腳本執(zhí)行參數(shù):
"""
@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即可,此后就可以一勞永逸地使用這個(gè)自定義的命令了。
此后,運(yùn)行指定的腳本可參考以下的命令:
python manage.py run_script your_script arg1 arg2 -v arg3
Django extensions
此外還可以通過django-extensions這個(gè)包內(nèi)置的runscript來實(shí)現(xiàn),這個(gè)方法可參考文檔:https://django-extensions-zh.readthedocs.io/zh_CN/latest/runscript.html
總結(jié)
到此這篇關(guān)于Django執(zhí)行指定腳本的幾種方法的文章就介紹到這了,更多相關(guān)Django執(zhí)行指定腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)簡單圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
基于python實(shí)現(xiàn)的百度音樂下載器python pyqt改進(jìn)版(附代碼)
這篇文章主要介紹了基于python實(shí)現(xiàn)的百度音樂下載器python pyqt改進(jìn)版(附代碼),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Python3 venv搭建輕量級虛擬環(huán)境的步驟(圖文)
這篇文章主要介紹了Python3 venv搭建輕量級虛擬環(huán)境的步驟(圖文),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
python基于socketserver實(shí)現(xiàn)并發(fā),驗(yàn)證客戶端的合法性
TCP協(xié)議的socket一次只能和一個(gè)客戶端通信, 而socketsever可以時(shí)間和多個(gè)客戶端通信。本文將講解socketserver的具體使用2021-05-05
Python3自帶工具2to3.py 轉(zhuǎn)換 Python2.x 代碼到Python3的操作
Python3自帶工具2to3.py 轉(zhuǎn)換 Python2.x 代碼到Python3的操作方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03

