国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django定期執行任務(實例講解)

2020-02-16 10:36:12
字體:
來源:轉載
供稿:網友

要在django項目中定期執行任務,比如每天一定的時間點抓取數據,刷新數據庫等,可以參考stackoverflow的方法,先編寫一個manage.py命令,然后使用crontab來定時執行這個命令。

定制manage.py命令

app可以使用manage.py注冊自己的命令,比如要在polls這個app中定制一個closepoll命令,要先向polls文件夾中添加一個management/commands的目錄:

polls/  __init__.py   models.py   management/    __init__.py     commands/      __init__.py       _private.py       closepoll.py   tests.py   views.py 

這樣,commands目錄下每一個不以"_"開頭的py文件都被注冊為一個manage.py命令。

python 2版本中注意management和commands目錄下都要包含一個__init__.py文件。

closepoll.py文件中必須定義一個繼承自BaseCommand的類Command。

from django.core.management.base import BaseCommand, CommandError from polls.models import Poll  class Command(BaseCommand):   help = 'Closes the specified poll for voting'   def add_arguments(self, parser):     parser.add_argument('poll_id', nargs='+', type=int)    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(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))

在django1.8之前,manage.py命令的命令行解析是基于optparse庫的,其中位置參數會被傳給*args,而可選參數傳給**options。1.8之后,命令行解析基于argparse庫,參數都是傳給**options的。

closepoll.py文件中添加了名為poll_id的位置參數,數目為一個或者更多,類型為整數:

def add_arguments(self, parser): parser.add_argument('poll_id', nargs='+', type=int) 

closepoll命令就可以這樣使用了:

python manage.py closepoll <poll_id> 

self.stdout和self.stderr可以在控制臺中顯示你想要顯示的信息。

可以添加可選參數:

class Command(BaseCommand):   def add_arguments(self, parser):     # Positional arguments     parser.add_argument('poll_id', nargs='+', type=int)      # Named (optional) arguments     parser.add_argument('--delete',       action='store_true',       dest='delete',       default=False,       help='Delete poll instead of closing it')    def handle(self, *args, **options):     # ...     if options['delete']:       poll.delete()

添加一個名為--delete值為True的可選參數。

執行python manage.py closepoll 1 2 3 --delete時,將id為1,2,3的poll刪除。

執行python manage.py closepoll 1 2 3 時,--delete取值為默認值False。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台北县| 安阳市| 绥芬河市| 台东市| 敦化市| 阿巴嘎旗| 樟树市| 昭苏县| 西充县| 广宁县| 平舆县| 井冈山市| 邯郸市| 崇州市| 辽源市| 光泽县| 清河县| 天长市| 嘉祥县| 云浮市| 布尔津县| 迭部县| 宁河县| 南木林县| 固始县| 汉中市| 保德县| 楚雄市| 隆昌县| 长汀县| 古浪县| 孝感市| 吴桥县| 壤塘县| 山阴县| 三明市| 二手房| 神池县| 峨眉山市| 三台县| 长顺县|