yxy添加 ping_baidu.py 注释

yxy_branch
严欣怡 4 months ago
parent 470712015a
commit a17f06d92d

@ -1,50 +1,88 @@
# 导入Django命令基类用于创建自定义管理命令
from django.core.management.base import BaseCommand
from djangoblog.spider_notify import SpiderNotify
from djangoblog.utils import get_current_site
from blog.models import Article, Tag, Category
# 导入搜索引擎推送工具、站点配置和博客模型
from djangoblog.spider_notify import SpiderNotify # 搜索引擎推送工具
from djangoblog.utils import get_current_site # 获取当前站点信息
from blog.models import Article, Tag, Category # 博客核心模型
# 获取当前站点的域名用于生成完整URL
site = get_current_site().domain
class Command(BaseCommand):
"""
Django自定义管理命令向百度搜索引擎推送URL
用于主动告知百度爬虫网站的更新内容加速收录
"""
# 命令的帮助信息执行python manage.py help ping_baidu时显示
help = 'notify baidu url'
def add_arguments(self, parser):
"""
定义命令参数指定需要推送的URL类型
通过parser添加命令行参数限制可选值
"""
parser.add_argument(
'data_type',
'data_type', # 参数名称
type=str,
choices=[
'all',
'article',
'tag',
'category'],
help='article : all article,tag : all tag,category: all category,all: All of these')
choices=[ # 可选参数值
'all', # 推送所有类型(文章、标签、分类)
'article', # 仅推送文章
'tag', # 仅推送标签页
'category' # 仅推送分类页
],
help='指定推送类型article(所有文章)、tag(所有标签)、category(所有分类)、all(全部)'
)
def get_full_url(self, path):
url = "https://{site}{path}".format(site=site, path=path)
return url
"""
生成完整的URL域名+相对路径
:param path: 模型实例的相对路径/article/1.html
:return: 完整的URL字符串如https://example.com/article/1.html
"""
return f"https://{site}{path}"
def handle(self, *args, **options):
type = options['data_type']
self.stdout.write('start get %s' % type)
"""
命令核心执行逻辑
根据参数类型收集URL推送给百度搜索引擎
"""
# 获取用户指定的推送类型
data_type = options['data_type']
self.stdout.write(f'开始收集{data_type}类型的URL...')
# 存储待推送的URL列表
urls = []
if type == 'article' or type == 'all':
# 1. 收集文章URL已发布状态
if data_type == 'article' or data_type == 'all':
# 筛选所有已发布的文章
for article in Article.objects.filter(status='p'):
# 调用文章模型的get_full_url方法获取完整URL
urls.append(article.get_full_url())
if type == 'tag' or type == 'all':
# 2. 收集标签页URL
if data_type == 'tag' or data_type == 'all':
for tag in Tag.objects.all():
url = tag.get_absolute_url()
urls.append(self.get_full_url(url))
if type == 'category' or type == 'all':
# 获取标签页的相对路径再生成完整URL
relative_url = tag.get_absolute_url()
urls.append(self.get_full_url(relative_url))
# 3. 收集分类页URL
if data_type == 'category' or data_type == 'all':
for category in Category.objects.all():
url = category.get_absolute_url()
urls.append(self.get_full_url(url))
# 获取分类页的相对路径再生成完整URL
relative_url = category.get_absolute_url()
urls.append(self.get_full_url(relative_url))
# 输出待推送的URL数量
self.stdout.write(
self.style.SUCCESS(
'start notify %d urls' %
len(urls)))
self.style.SUCCESS(f'准备推送{len(urls)}条URL...')
)
# 调用工具类向百度推送URL
SpiderNotify.baidu_notify(urls)
self.stdout.write(self.style.SUCCESS('finish notify'))
# 推送完成,输出成功信息
self.stdout.write(self.style.SUCCESS('URL推送完成'))
Loading…
Cancel
Save