Skip to content

Commit

Permalink
Merge 2d3dbec into 4ac5b32
Browse files Browse the repository at this point in the history
  • Loading branch information
liangliangyy committed Jul 18, 2018
2 parents 4ac5b32 + 2d3dbec commit 0ae5864
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 1 deletion.
27 changes: 27 additions & 0 deletions DjangoBlog/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
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__)

Expand Down Expand Up @@ -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
36 changes: 36 additions & 0 deletions blog/management/commands/sync_user_avatar.py
Original file line number Diff line number Diff line change
@@ -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('结束同步')
2 changes: 2 additions & 0 deletions blog/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

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)
Expand Down Expand Up @@ -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 = '网站配置'
Expand Down
4 changes: 3 additions & 1 deletion oauth/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
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
Expand Down Expand Up @@ -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')
Expand Down

0 comments on commit 0ae5864

Please sign in to comment.