Django執(zhí)行指定腳本的幾種方法
前言
用Django寫(xiě)項(xiàng)目,遇到臨時(shí)需要處理數(shù)據(jù)庫(kù)的問(wèn)題時(shí),會(huì)考慮直接讓腳本在項(xiàng)目環(huán)境中運(yùn)行,這樣就可以直接用定義好的模型和方法了。
這里提供幾種方法,通過(guò)Django執(zhí)行指定的腳本,讓腳本直接在Django項(xiàng)目的環(huán)境中來(lái)運(yùn)行。
Django Shell
Django自帶的shell其實(shí)就加載了項(xiàng)目的各種環(huán)境變量,網(wǎng)上描述得也很多,直接這么跑就可以了:
python manage.py shell < script.py
簡(jiǎn)單是非常簡(jiǎn)單,不足的地方就是不好加參數(shù)進(jìn)去,而且喜歡寫(xiě)main的話(huà)也不好讓腳本跑起來(lái)。
自定義Command
也可以通過(guò)自定義一個(gè)簡(jiǎn)單的command來(lái)實(shí)現(xiàn)需要的效果,以下是最近寫(xiě)的一個(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
此外還可以通過(guò)django-extensions這個(gè)包內(nèi)置的runscript來(lái)實(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
推薦值得學(xué)習(xí)的12款python-web開(kāi)發(fā)框架
這篇文章主要介紹了值得學(xué)習(xí)的12款python-web開(kāi)發(fā)框架,幫助大家更好的理解和學(xué)習(xí)Python web開(kāi)發(fā),感興趣的朋友可以了解下2020-08-08Python遍歷pandas數(shù)據(jù)方法總結(jié)
本篇文章給大家詳細(xì)介紹了Python中遍歷pandas數(shù)據(jù)方法以及相關(guān)注意點(diǎn),對(duì)此有興趣的朋友參考學(xué)習(xí)下吧。2018-02-02基于python實(shí)現(xiàn)垂直爬蟲(chóng)系統(tǒng)的方法詳解
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)垂直爬蟲(chóng)系統(tǒng)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-0323個(gè)很棒的Python腳本集合分享(迷你項(xiàng)目)
這篇文章主要為大家詳細(xì)介紹了23個(gè)很棒的Python腳本的集合(迷你項(xiàng)目),文中的示例代碼講解詳細(xì),對(duì)我們了解Python有一定幫助,感興趣的可以了解一下2022-11-11Python?pygame派生精靈和精靈組創(chuàng)建敵機(jī)
這篇文章主要為大家介紹了Python?pygame派生精靈和精靈組創(chuàng)建敵機(jī)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08