在 Django framework 下開發許多功能,結果突然想要用到 tools 模式時,想到大部分都是在 python manager shell 下進行,一時之間沒想到好解法,例如想要定期跑某個程式時,只想到弄成 CGI 模式,用 wget 搭配 crontab 去啟動事件。

今天跑去問了前輩,前輩就跟我說有可以寫成 tools 的方式:Django | Writing custom django-admin commands | Django documentation,經測試也滿成功的。

筆記一下:

假設專案叫 myproj ,並且裡頭有個 myapp,目錄結構如下:

/path/myproj/myapp/
/path/myproj/settings.py
...

接著在 myapp 內建立 management/commands 結構:

$ mkdir -p /path/myproj/myapp/management/commands
$ touch /path/myproj/myapp/management/__init__.py
$ touch /path/myproj/myapp/management/commands/__init__.py
$ vim /path/myproj/myapp/management/commands/mycmd.py

from django.core.management.base import BaseCommand, CommandError
from myproj.myapp import views as v

class Command(BaseCommand):
args = '<poll_id poll_id ...>'
help = 'Closes the specified poll for voting'

def handle(self, *args, **options):
for poll_id in args:
if pool_id == 'test':
print 'test'

如此一來,就可以使用 tools 模式執行,而本身就只要去改上述 print 'test' 的部分,弄成想要跑的函數:

$ cd /path/myproj && python /path/myproj/manager.py mycmd test
test

還算滿簡單便利的,細節就請到官網查看囉。 


changyy 發表在 痞客邦 PIXNET 留言(0) 人氣()