From 2d3dbec3b45b1bbe4c4d3fe72fcf89453d9c3b4f Mon Sep 17 00:00:00 2001 From: liangliang Date: Wed, 18 Jul 2018 22:36:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E7=94=A8=E6=88=B7=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=9C=AC=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DjangoBlog/utils.py | 27 +++++++++++++++ blog/management/commands/sync_user_avatar.py | 36 ++++++++++++++++++++ blog/models.py | 2 ++ oauth/views.py | 4 ++- 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 blog/management/commands/sync_user_avatar.py diff --git a/DjangoBlog/utils.py b/DjangoBlog/utils.py index f1606dfc7..fca7e4823 100644 --- a/DjangoBlog/utils.py +++ b/DjangoBlog/utils.py @@ -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__) @@ -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 diff --git a/blog/management/commands/sync_user_avatar.py b/blog/management/commands/sync_user_avatar.py new file mode 100644 index 000000000..24bf108ef --- /dev/null +++ b/blog/management/commands/sync_user_avatar.py @@ -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('结束同步') diff --git a/blog/models.py b/blog/models.py index a45351fa1..3f95ed4db 100644 --- a/blog/models.py +++ b/blog/models.py @@ -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) @@ -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 = '网站配置' diff --git a/oauth/views.py b/oauth/views.py index a199718d6..f07bb34ca 100644 --- a/oauth/views.py +++ b/oauth/views.py @@ -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 @@ -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')