Skip to content

Commit 42c12b2

Browse files
authoredJul 18, 2018
Merge pull request liangliangyy#137 from liangliangyy/dev
将用户头像保存本地
2 parents 4ac5b32 + 2d3dbec commit 42c12b2

File tree

4 files changed

+68
-1
lines changed

4 files changed

+68
-1
lines changed
 

‎DjangoBlog/utils.py

+27
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
import _thread
2525
from django.core.mail import EmailMultiAlternatives
2626
from django.conf import settings
27+
import requests
28+
import datetime
29+
import uuid
30+
import os
2731

2832
logger = logging.getLogger(__name__)
2933

@@ -200,3 +204,26 @@ def get_blog_setting():
200204
logger.info('set cache get_blog_setting')
201205
cache.set('get_blog_setting', value)
202206
return value
207+
208+
209+
def save_user_avatar(url):
210+
try:
211+
rsp = requests.get(url)
212+
if rsp.status_code == 200:
213+
setting = get_blog_setting()
214+
215+
basepath = r'{basedir}/avatar/'.format(basedir=setting.resource_path)
216+
if not os.path.exists(basepath):
217+
os.makedirs(basepath)
218+
219+
imgextensions = ['.jpg', '.png', 'jpeg', '.gif']
220+
isimage = len([i for i in imgextensions if url.endswith(i)]) > 0
221+
ext = os.path.splitext(url)[1] if isimage else '.jpg'
222+
savefilename = str(uuid.uuid4().hex) + ext
223+
logger.info('保存用户头像:' + basepath + savefilename)
224+
with open(basepath + savefilename, 'wb+') as file:
225+
file.write(rsp.content)
226+
return 'https://resource.lylinux.net/avatar/' + savefilename
227+
except Exception as e:
228+
logger.error(e)
229+
return url
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env python
2+
# encoding: utf-8
3+
4+
5+
"""
6+
@version: ??
7+
@author: liangliangyy
8+
@license: MIT Licence
9+
@contact: liangliangyy@gmail.com
10+
@site: https://www.lylinux.net/
11+
@software: PyCharm
12+
@file: sync_user_avatar.py
13+
@time: 2018/7/18 下午10:21
14+
"""
15+
16+
from django.core.management.base import BaseCommand
17+
from oauth.models import OAuthUser
18+
from DjangoBlog.utils import save_user_avatar
19+
20+
21+
class Command(BaseCommand):
22+
help = 'sync user avatar'
23+
24+
def handle(self, *args, **options):
25+
users = OAuthUser.objects.filter(picture__isnull=False).exclude(
26+
picture__istartswith='https://resource.lylinux.net').all()
27+
self.stdout.write('开始同步{count}个用户头像'.format(count=len(users)))
28+
for u in users:
29+
self.stdout.write('开始同步:{id}'.format(id=u.nikename))
30+
url = u.picture
31+
url = save_user_avatar(url)
32+
if url:
33+
self.stdout.write('结束同步:{id}.url:{url}'.format(id=u.nikename, url=url))
34+
u.picture = url
35+
u.save()
36+
self.stdout.write('结束同步')

‎blog/models.py

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
logger = logging.getLogger(__name__)
1414

15+
1516
class BaseModel(models.Model):
1617
slug = models.SlugField(default='no-slug', max_length=160, blank=True)
1718
created_time = models.DateTimeField('创建时间', default=now)
@@ -250,6 +251,7 @@ class BlogSettings(models.Model):
250251
analyticscode = models.TextField("网站统计代码", max_length=1000, null=False, blank=False, default='')
251252
show_gongan_code = models.BooleanField('是否显示公安备案号', default=False, null=False)
252253
gongan_beiancode = models.TextField('公安备案号', max_length=2000, null=True, blank=True, default='')
254+
resource_path = models.CharField("静态文件保存地址", max_length=300, null=False, default='/var/www/resource/')
253255

254256
class Meta:
255257
verbose_name = '网站配置'

‎oauth/views.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from django.views.generic import FormView, RedirectView
1212
from oauth.forms import RequireEmailForm
1313
from django.urls import reverse
14-
from DjangoBlog.utils import send_email, get_md5
14+
from DjangoBlog.utils import send_email, get_md5, save_user_avatar
1515
from django.contrib.sites.models import Site
1616
from django.core.exceptions import ObjectDoesNotExist
1717
from django.http import HttpResponseForbidden
@@ -50,6 +50,8 @@ def authorize(request):
5050
user = manager.get_oauth_userinfo()
5151

5252
if user:
53+
if user.picture:
54+
user.picture = save_user_avatar(user.picture)
5355
if not user.nikename:
5456
import datetime
5557
user.nikename = "djangoblog" + datetime.datetime.now().strftime('%y%m%d%I%M%S')

0 commit comments

Comments
 (0)
Please sign in to comment.