Skip to content

Commit ede88b3

Browse files
committed
修改resource配置
1 parent 7243508 commit ede88b3

File tree

6 files changed

+49
-38
lines changed

6 files changed

+49
-38
lines changed

blog/management/commands/sync_user_avatar.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.core.management.base import BaseCommand
2+
from django.template.context_processors import static
23

34
from djangoblog.utils import save_user_avatar
45
from oauth.models import OAuthUser
@@ -8,8 +9,9 @@ class Command(BaseCommand):
89
help = 'sync user avatar'
910

1011
def handle(self, *args, **options):
12+
static_url = static("avatar/")
1113
users = OAuthUser.objects.filter(picture__isnull=False).exclude(
12-
picture__istartswith='https://resource.lylinux.net').all()
14+
picture__istartswith=static_url).all()
1315
self.stdout.write('开始同步{count}个用户头像'.format(count=len(users)))
1416
for u in users:
1517
self.stdout.write('开始同步:{id}'.format(id=u.nikename))

blog/models.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ class BlogSettings(models.Model):
318318
article_sub_length = models.IntegerField("文章摘要长度", default=300)
319319
sidebar_article_count = models.IntegerField("侧边栏文章数目", default=10)
320320
sidebar_comment_count = models.IntegerField("侧边栏评论数目", default=5)
321-
article_comment_count = models.IntegerField("文章评论数目", default=5)
321+
article_comment_count = models.IntegerField("文章页面默认显示评论数目", default=5)
322322
show_google_adsense = models.BooleanField('是否显示谷歌广告', default=False)
323323
google_adsense_codes = models.TextField(
324324
'广告内容', max_length=2000, null=True, blank=True, default='')
@@ -343,11 +343,6 @@ class BlogSettings(models.Model):
343343
null=True,
344344
blank=True,
345345
default='')
346-
resource_path = models.CharField(
347-
"静态文件保存地址",
348-
max_length=300,
349-
null=False,
350-
default='/var/www/resource/')
351346

352347
class Meta:
353348
verbose_name = '网站配置'

blog/templatetags/blog_tags.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from django.db.models import Q
99
from django.shortcuts import get_object_or_404
1010
from django.template.defaultfilters import stringfilter
11+
from django.templatetags.static import static
1112
from django.urls import reverse
1213
from django.utils.safestring import mark_safe
1314

@@ -295,8 +296,7 @@ def gravatar_url(email, size=40):
295296
return o[0].picture
296297
email = email.encode('utf-8')
297298

298-
default = "https://resource.lylinux.net/image/2017/03/26/120117.jpg".encode(
299-
'utf-8')
299+
default = static('blog/images/default_avatar.jpg')
300300

301301
url = "https://www.gravatar.com/avatar/%s?%s" % (hashlib.md5(
302302
email.lower()).hexdigest(), urllib.parse.urlencode({'d': default, 's': str(size)}))

blog/views.py

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from django.http import HttpResponse, HttpResponseForbidden
88
from django.shortcuts import get_object_or_404
99
from django.shortcuts import render
10+
from django.templatetags.static import static
1011
from django.utils import timezone
1112
from django.views.decorators.csrf import csrf_exempt
1213
from django.views.generic.detail import DetailView
@@ -313,20 +314,11 @@ def fileupload(request):
313314
imgextensions = ['jpg', 'png', 'jpeg', 'bmp']
314315
fname = u''.join(str(filename))
315316
isimage = len([i for i in imgextensions if fname.find(i) >= 0]) > 0
316-
blogsetting = get_blog_setting()
317-
318-
basepath = r'{basedir}/{type}/{timestr}'.format(
319-
basedir=blogsetting.resource_path,
320-
type='files' if not isimage else 'image',
321-
timestr=timestr)
322-
if settings.TESTING:
323-
basepath = settings.BASE_DIR + '/uploads'
324-
url = 'https://resource.lylinux.net/{type}/{timestr}/{filename}'.format(
325-
type='files' if not isimage else 'image', timestr=timestr, filename=filename)
326-
if not os.path.exists(basepath):
327-
os.makedirs(basepath)
328-
savepath = os.path.normpath(os.path.join(basepath, f"{uuid.uuid4().hex}{os.path.splitext(filename)[-1]}"))
329-
if not savepath.startswith(basepath):
317+
base_dir = os.path.join(settings.STATICFILES, "files" if not isimage else "image", timestr)
318+
if not os.path.exists(base_dir):
319+
os.makedirs(base_dir)
320+
savepath = os.path.normpath(os.path.join(base_dir, f"{uuid.uuid4().hex}{os.path.splitext(filename)[-1]}"))
321+
if not savepath.startswith(base_dir):
330322
return HttpResponse("only for post")
331323
with open(savepath, 'wb+') as wfile:
332324
for chunk in request.FILES[filename].chunks():
@@ -335,6 +327,7 @@ def fileupload(request):
335327
from PIL import Image
336328
image = Image.open(savepath)
337329
image.save(savepath, quality=20, optimize=True)
330+
url = static(savepath)
338331
response.append(url)
339332
return HttpResponse(response)
340333

djangoblog/utils.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111

1212
import markdown
1313
import requests
14+
from django.conf import settings
1415
from django.contrib.sites.models import Site
1516
from django.core.cache import cache
17+
from django.templatetags.static import static
1618

1719
logger = logging.getLogger(__name__)
1820

@@ -179,27 +181,26 @@ def save_user_avatar(url):
179181
logger.info(url)
180182

181183
try:
184+
basedir = os.path.join(settings.STATICFILES, 'avatar')
185+
182186
imgname = url.split('/')[-1]
183187
if imgname:
184-
path = r'{basedir}/avatar/{img}'.format(
185-
basedir=setting.resource_path, img=imgname)
188+
path = f'{basedir}/{imgname}'
186189
if os.path.exists(path):
187190
os.remove(path)
188191
rsp = requests.get(url, timeout=2)
189192
if rsp.status_code == 200:
190-
basepath = r'{basedir}/avatar/'.format(
191-
basedir=setting.resource_path)
192-
if not os.path.exists(basepath):
193-
os.makedirs(basepath)
193+
if not os.path.exists(basedir):
194+
os.makedirs(basedir)
194195

195-
imgextensions = ['.jpg', '.png', 'jpeg', '.gif']
196-
isimage = len([i for i in imgextensions if url.endswith(i)]) > 0
196+
image_extensions = ['.jpg', '.png', 'jpeg', '.gif']
197+
isimage = len([i for i in image_extensions if url.endswith(i)]) > 0
197198
ext = os.path.splitext(url)[1] if isimage else '.jpg'
198-
savefilename = str(uuid.uuid4().hex) + ext
199-
logger.info('保存用户头像:' + basepath + savefilename)
200-
with open(basepath + savefilename, 'wb+') as file:
199+
save_filename = str(uuid.uuid4().hex) + ext
200+
logger.info('保存用户头像:' + basedir + save_filename)
201+
with open(os.path.join(basedir, save_filename), 'wb+') as file:
201202
file.write(rsp.content)
202-
return 'https://resource.lylinux.net/avatar/' + savefilename
203+
return static('avatar/' + save_filename)
203204
except Exception as e:
204205
logger.error(e)
205206
return url
@@ -217,3 +218,11 @@ def delete_view_cache(prefix, keys):
217218
from django.core.cache.utils import make_template_fragment_key
218219
key = make_template_fragment_key(prefix, keys)
219220
cache.delete(key)
221+
222+
223+
def get_resource_url():
224+
if settings.STATIC_URL:
225+
return settings.STATIC_URL
226+
else:
227+
site = get_current_site()
228+
return 'http://' + site.domain + '/static/'

oauth/tests.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
1-
from django.test import TestCase
1+
from django.test import Client, RequestFactory, TestCase
22

3-
from .models import OAuthConfig
3+
from oauth.models import OAuthConfig
44

55

66
# Create your tests here.
77
class OAuthConfigTest(TestCase):
8-
def config_save_test(self):
8+
def setUp(self):
9+
self.client = Client()
10+
self.factory = RequestFactory()
11+
12+
def test_oauth_login_test(self):
913
c = OAuthConfig()
1014
c.type = 'weibo'
1115
c.appkey = 'appkey'
1216
c.appsecret = 'appsecret'
1317
c.save()
18+
19+
response = self.client.get('/oauth/oauthlogin?type=weibo')
20+
self.assertEqual(response.status_code, 302)
21+
self.assertTrue("api.weibo.com" in response.url)
22+
23+
response = self.client.get('/oauth/authorize?type=weibo&code=code')
24+
self.assertEqual(response.status_code, 302)
25+
self.assertEqual(response.url, '/')

0 commit comments

Comments
 (0)