一、編寫自定義django-admin命令
注:利用django-admin自定義命令我們可以ORM框架對model進行操作,如:定時更新數據庫,檢測數據庫狀態.....
Django為項目中每一個應用下的management/commands目錄中名字沒有以下划線開始的Python模塊都注冊了一個manage.py命令,例如:
polls/ __init__.py models.py management/ __init__.py commands/ __init__.py _private.py closepoll.py tests.py views.py
_private.py將不可以作為一個管理命令使用。
closepoll.py模塊只有一個要求 – 它必須定義一個Command類並擴展自Basecommand或其子類
from
django.core.management.base
import
BaseCommand, CommandError
from
polls.models
import
Poll
class
Command(BaseCommand):
help
=
'Closes the specified poll for voting'
#必須實現的方法
def
handle(
self
,
*
args,
*
*
options):
for
poll_id
in
options[
'poll_id'
]:
try
:
poll
=
Poll.objects.get(pk
=
poll_id)
except
Poll.DoesNotExist:
raise
CommandError(
'Poll "%s" does not exist'
%
poll_id)
poll.opened
=
False
poll.save()
self
.stdout.write(
'Successfully closed poll "%s"'
%
poll_id)
|
新的自定義命令可以使用python manage.py closepoll 調用。
二、 django-crontab實現Django定時任務
-
django-crontab安裝:
pip
install
django-
crontab
-
django-crontab加入:只需要將
django-crontab
加入到settings.py的INSTALLED_APPS
即可。如下代碼:INSTALLED_APPS = (
'django_crontab'
,
...
)
-
django-crontab配置:
settings.py
中加入django-crontab的命令即可:CRONJOBS = [
(
'47 11 * * *'
,
'django.core.management.call_command'
, [
'closepoll'
],{},
'>> /var/run.log'
),
]
格式:
參數1:定時 例如47 11 * * *
表示每天的11時47分執行
參數2:方法的python模塊路徑,如果執行django-admin命令,則寫django.core.management.call_command
參數3:方法的位置參數列表(默認值:[]),如果執行django-admin命令,則填寫所需執行的命令,例如我們在polls中已經定義過的closepoll
參數4:方法的關鍵字參數的dict(默認值:{})
參數5:執行log存放位置(即重定向到文件,默認:'') -
django-crontab任務加載:
django-
crontab
任務加載比較簡單,只需要運行 python manage.py
crontab
add 即可
查看已經激活的任務使用 python manage.py
crontab
show
刪除已經有的任務使用 python manage.py
crontab
remove
如果你修改了任務記得一定要使用 python manage.py
crontab
add 這個會更新定時任務