为Django的manage.py添加自定义命令

有时候会有这样的需求,为django执行一些定时任务,比如通知搜索引擎,例如百度,提交网站的一些地址给他们,通过为django的manage.py添加自定义命令可以很容易的解决这个问题。下面介绍下如何添加。

首先需要在创建好的app应用的根目录创建文件夹名为management的目录,然后继续在该目录创建commands的目录,并在两个目录中都要创建__init__.py的python文件。 目录创建好之后继续在commands的目录中添加notify_baidu.py文件,文件名将会是manage.py的命令名。目录结构如下:

示例图片

代码内容大概如下:

# -*- coding: utf-8 -*-

import requests
from django.core.management.base import BaseCommand
from article.models import Article
from article.constants import BlogStatus, DOMAIN


class Command(BaseCommand):

    def notify_baidu(self):
        articles = Article.objects.filter(status=BlogStatus.PUBLISHED).order_by('-id')
        urls = [DOMAIN + article.get_absolute_url() for article in articles]
        api = 'http://data.zz.baidu.com/urls?site=yangsihan.com&token=xxxxxxxxxxxxx'
        response = requests.post(api, data='\n'.join(urls))
        print (response.content.decode())

    def handle(self, *args, **options):
        self.notify_baidu()

至此,基本都完成了,执行也很简单:

python manage.py notify_baidu  # notify_baidu就是文件名

相关链接:
https://www.lylinux.net/article/2017/1/17/8.html