将用户头像保存本地

master
liangliang 8 years ago
parent 02eb47a40d
commit 2d3dbec3b4

@ -24,6 +24,10 @@ import logging
import _thread
from django.core.mail import EmailMultiAlternatives
from django.conf import settings
import requests
import datetime
import uuid
import os
logger = logging.getLogger(__name__)
@ -200,3 +204,26 @@ def get_blog_setting():
logger.info('set cache get_blog_setting')
cache.set('get_blog_setting', value)
return value
def save_user_avatar(url):
try:
rsp = requests.get(url)
if rsp.status_code == 200:
setting = get_blog_setting()
basepath = r'{basedir}/avatar/'.format(basedir=setting.resource_path)
if not os.path.exists(basepath):
os.makedirs(basepath)
imgextensions = ['.jpg', '.png', 'jpeg', '.gif']
isimage = len([i for i in imgextensions if url.endswith(i)]) > 0
ext = os.path.splitext(url)[1] if isimage else '.jpg'
savefilename = str(uuid.uuid4().hex) + ext
logger.info('保存用户头像:' + basepath + savefilename)
with open(basepath + savefilename, 'wb+') as file:
file.write(rsp.content)
return 'https://resource.lylinux.net/avatar/' + savefilename
except Exception as e:
logger.error(e)
return url

@ -0,0 +1,36 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: sync_user_avatar.py
@time: 2018/7/18 下午10:21
"""
from django.core.management.base import BaseCommand
from oauth.models import OAuthUser
from DjangoBlog.utils import save_user_avatar
class Command(BaseCommand):
help = 'sync user avatar'
def handle(self, *args, **options):
users = OAuthUser.objects.filter(picture__isnull=False).exclude(
picture__istartswith='https://resource.lylinux.net').all()
self.stdout.write('开始同步{count}个用户头像'.format(count=len(users)))
for u in users:
self.stdout.write('开始同步:{id}'.format(id=u.nikename))
url = u.picture
url = save_user_avatar(url)
if url:
self.stdout.write('结束同步:{id}.url:{url}'.format(id=u.nikename, url=url))
u.picture = url
u.save()
self.stdout.write('结束同步')

@ -12,6 +12,7 @@ from django.utils.timezone import now
logger = logging.getLogger(__name__)
class BaseModel(models.Model):
slug = models.SlugField(default='no-slug', max_length=160, blank=True)
created_time = models.DateTimeField('创建时间', default=now)
@ -250,6 +251,7 @@ class BlogSettings(models.Model):
analyticscode = models.TextField("网站统计代码", max_length=1000, null=False, blank=False, default='')
show_gongan_code = models.BooleanField('是否显示公安备案号', default=False, null=False)
gongan_beiancode = models.TextField('公安备案号', max_length=2000, null=True, blank=True, default='')
resource_path = models.CharField("静态文件保存地址", max_length=300, null=False, default='/var/www/resource/')
class Meta:
verbose_name = '网站配置'

@ -11,7 +11,7 @@ from django.shortcuts import get_object_or_404
from django.views.generic import FormView, RedirectView
from oauth.forms import RequireEmailForm
from django.urls import reverse
from DjangoBlog.utils import send_email, get_md5
from DjangoBlog.utils import send_email, get_md5, save_user_avatar
from django.contrib.sites.models import Site
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponseForbidden
@ -50,6 +50,8 @@ def authorize(request):
user = manager.get_oauth_userinfo()
if user:
if user.picture:
user.picture = save_user_avatar(user.picture)
if not user.nikename:
import datetime
user.nikename = "djangoblog" + datetime.datetime.now().strftime('%y%m%d%I%M%S')

Loading…
Cancel
Save