|
|
|
|
@ -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 输出同步结束提示
|
|
|
|
|
|