From 8ce79f9561434dd5e77edb6ba7430f5cceb72f04 Mon Sep 17 00:00:00 2001 From: p36kxhw2t <3180321407@qq.com> Date: Sun, 30 Nov 2025 12:17:37 +0800 Subject: [PATCH] Update sync_user_avatar.py --- .../management/commands/sync_user_avatar.py | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/DjangoBlog/blog/management/commands/sync_user_avatar.py b/src/DjangoBlog/blog/management/commands/sync_user_avatar.py index d0f4612..57e65bd 100644 --- a/src/DjangoBlog/blog/management/commands/sync_user_avatar.py +++ b/src/DjangoBlog/blog/management/commands/sync_user_avatar.py @@ -7,41 +7,41 @@ from oauth.models import OAuthUser from oauth.oauthmanager import get_manager_by_type -class Command(BaseCommand): - help = 'sync user avatar' +class Command(BaseCommand): #ZNY 定义同步用户头像命令类,继承BaseCommand + help = 'sync user avatar' #ZNY 命令帮助信息:同步用户头像 - def test_picture(self, url): + def test_picture(self, url): #ZNY 测试图片URL是否可访问方法 try: - if requests.get(url, timeout=2).status_code == 200: - return True - except: - pass + if requests.get(url, timeout=2).status_code == 200: #ZNY 发送HTTP请求测试图片URL,设置2秒超时 + return True #ZNY 如果返回200状态码,返回True + except: #ZNY 捕获所有异常 + pass #ZNY 发生异常时忽略 - def handle(self, *args, **options): - static_url = static("../") - users = OAuthUser.objects.all() - self.stdout.write(f'开始同步{len(users)}个用户头像') - for u in users: - self.stdout.write(f'开始同步:{u.nickname}') - url = u.picture - if url: - if url.startswith(static_url): - if self.test_picture(url): - continue - else: - if u.metadata: - manage = get_manager_by_type(u.type) - url = manage.get_picture(u.metadata) - url = save_user_avatar(url) - else: - url = static('blog/img/avatar.png') - else: - url = save_user_avatar(url) - else: - url = static('blog/img/avatar.png') - if url: - self.stdout.write( - f'结束同步:{u.nickname}.url:{url}') - u.picture = url - u.save() - self.stdout.write('结束同步') + def handle(self, *args, **options): #ZNY 命令处理主方法 + static_url = static("../") #ZNY 获取静态文件基础URL + users = OAuthUser.objects.all() #ZNY 获取所有OAuth用户 + self.stdout.write(f'开始同步{len(users)}个用户头像') #ZNY 输出开始同步的提示,显示用户数量 + for u in users: #ZNY 遍历所有用户 + self.stdout.write(f'开始同步:{u.nickname}') #ZNY 输出开始同步当前用户的提示 + url = u.picture #ZNY 获取用户当前头像URL + if url: #ZNY 如果头像URL存在 + if url.startswith(static_url): #ZNY 如果头像URL是静态文件路径 + if self.test_picture(url): #ZNY 测试静态图片是否可访问 + continue #ZNY 如果可访问则跳过当前用户 + else: #ZNY 如果静态图片不可访问 + if u.metadata: #ZNY 如果用户有元数据 + manage = get_manager_by_type(u.type) #ZNY 根据OAuth类型获取对应的管理器 + url = manage.get_picture(u.metadata) #ZNY 从元数据中获取头像URL + url = save_user_avatar(url) #ZNY 保存用户头像并返回新的URL + else: #ZNY 如果没有元数据 + url = static('blog/img/avatar.png') #ZNY 使用默认头像 + else: #ZNY 如果头像URL不是静态文件路径 + url = save_user_avatar(url) #ZNY 保存用户头像并返回新的URL + else: #ZNY 如果没有头像URL + url = static('blog/img/avatar.png') #ZNY 使用默认头像 + if url: #ZNY 如果最终头像URL存在 + self.stdout.write( #ZNY 输出同步完成提示 + f'结束同步:{u.nickname}.url:{url}') #ZNY 显示用户名和最终头像URL + u.picture = url #ZNY 更新用户头像URL + u.save() #ZNY 保存用户信息 + self.stdout.write('结束同步') #ZNY 输出同步结束提示