ic tiny button" rel="nofollow" href="/Pai2/pai2/src/37c5365a18e030568b523635a6e88ad4993b1caf/requirements.txt">View File
@@ -18,6 +18,7 @@ django-paginator2==1.0.3
18 18
 django-rlog==1.0.7
19 19
 django-shortuuidfield==0.1.3
20 20
 django-six==1.0.2
21
+django-we==1.0.1
21 22
 djangorestframework==3.6.3
22 23
 furl==1.0.0
23 24
 hiredis==0.2.0

+ 0 - 0
wechat/__init__.py


+ 0 - 4
wechat/admin.py

@@ -1,4 +0,0 @@
1
-from django.contrib import admin
2
-
3
-
4
-# Register your models here.

+ 0 - 0
wechat/migrations/__init__.py


+ 0 - 4
wechat/models.py

@@ -1,4 +0,0 @@
1
-from django.db import models
2
-
3
-
4
-# Create your models here.

+ 0 - 4
wechat/tests.py

@@ -1,4 +0,0 @@
1
-from django.test import TestCase
2
-
3
-
4
-# Create your tests here.

+ 0 - 54
wechat/views.py

@@ -1,54 +0,0 @@
1
-# -*- coding: utf-8 -*-
2
-
3
-from django.conf import settings
4
-from django.shortcuts import redirect
5
-from furl import furl
6
-from json_response import auto_response
7
-from pywe_jssdk import jsapi_signature_params
8
-from pywe_oauth import get_access_info, get_oauth_code_url, get_userinfo
9
-
10
-
11
-JSAPI = settings.WECHAT.get('JSAPI', {})
12
-
13
-
14
-def wx_oauth2(request):
15
-    scope = request.GET.get('scope', 'snsapi_userinfo')
16
-    redirect_url = request.GET.get('redirect_url', '')
17
-    default_url = request.GET.get('default_url', '')
18
-
19
-    if request.weixin:
20
-        redirect_uri = settings.WECHAT_USERINFO_REDIRECT_URI if scope == 'snsapi_userinfo' else settings.WECHAT_BASE_REDIRECT_URI
21
-        return redirect(get_oauth_code_url(JSAPI['appID'], redirect_uri, scope, redirect_url))
22
-
23
-    return redirect(default_url or redirect_url)
24
-
25
-
26
-def base_redirect(request):
27
-    code = request.GET.get('code', '')
28
-    state = request.GET.get('state', '')
29
-
30
-    access_info = get_access_info(JSAPI['appID'], JSAPI['appsecret'], code)
31
-    if 'errcode' in access_info:
32
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
33
-
34
-    return redirect(furl(state).add(access_info).url)
35
-
36
-
37
-def userinfo_redirect(request):
38
-    code = request.GET.get('code', '')
39
-    state = request.GET.get('state', '')
40
-
41
-    access_info = get_access_info(JSAPI['appID'], JSAPI['appsecret'], code)
42
-    if 'errcode' in access_info:
43
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
44
-
45
-    userinfo = get_userinfo(access_info.get('access_token', ''), access_info.get('openid', ''))
46
-    if 'openid' not in userinfo:
47
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
48
-
49
-    return redirect(furl(state).add(userinfo).url)
50
-
51
-
52
-@auto_response
53
-def wx_jsapi_signature_api(request):
54
-    return jsapi_signature_params(JSAPI['appID'], JSAPI['appsecret'], request.GET.get('url', ''))

kodo - Gogs: Go Git Service

Нет описания

storage_qiniu_utils.py 5.2KB

    # -*- coding: utf-8 -*- import os import shortuuid from django.conf import settings from django.core.files.storage import default_storage from django.db import transaction from django_file_md5 import calculate_md5 from photo.models import PhotoUUIDInfo from utils.qiniucdn import upload_file_path from utils.thumbnail_utils import make_thumbnail from utils.watermark_utils import watermark_wrap class DotDict(dict): """ dot.notation access to dictionary attributes """ def __getattr__(self, attr): return self.get(attr) __setattr__ = dict.__setitem__ __delattr__ = dict.__delitem__ def file_abspath(file_path=None): return os.path.join(settings.MEDIA_ROOT, file_path).replace('\\', '/') @transaction.atomic def file_save(file_=None, file_path=None, prefix='img', ext='.jpeg', watermark=False, thumbnail=False): photo_path, photo_watermark_path, photo_thumbnail_path, photo_thumbnail2_path = '', '', '', '' # Photo file_ = file_ or default_storage.open(file_path) # Ext ext = os.path.splitext(file_.name)[-1] or ext # Photo MD5 photo_md5 = calculate_md5(file_) # Photo UUID Get or Create photo, created = PhotoUUIDInfo.objects.select_for_update().get_or_create(photo_md5=photo_md5) # 无水印 if not photo.photo_path: photo_path = '{}/{}{}'.format(prefix, shortuuid.uuid(), ext) if default_storage.exists(photo_path): default_storage.delete(photo_path) default_storage.save(photo_path, file_) photo_path_qiniu = upload_file_path(file_abspath(photo_path), bucket='photo') photo.photo_path = photo_path_qiniu photo.save() else: if ((watermark and not photo.photo_watermark_path) or (thumbnail and not (photo.photo_thumbnail_path and photo.photo_thumbnail2_path))) and (not default_storage.exists(photo.photo_path)): default_storage.save(photo.photo_path, file_) # 有水印 if watermark: if not photo.photo_watermark_path: if settings.WATERMARK_OR_NOT: photo_watermark_path = 'photo/{}{}'.format(shortuuid.uuid(), ext) watermark_wrap( file_abspath(photo_path), settings.WATERMARK_LOGO_PATH, file_abspath(photo_watermark_path) ) photo_watermark_path_qiniu = upload_file_path(file_abspath(photo_watermark_path), bucket='watermark') photo.photo_watermark_path = photo_watermark_path_qiniu else: photo.photo_watermark_path = photo_path_qiniu photo.save() # 缩略图 if thumbnail: if not photo.photo_thumbnail_path: # 双列: 540, 40-50K photo_thumbnail_path = photo_path.replace('.', '_thumbnail.') photo_w, photo_h, photo_thumbnail_w, photo_thumbnail_h = make_thumbnail( file_abspath(photo_path), file_abspath(photo_thumbnail_path), settings.THUMBNAIL_MAX_WIDTH ) photo_thumbnail_path_qiniu = upload_file_path(file_abspath(photo_thumbnail_path), bucket='thumbnail') photo.photo_w = photo_w photo.photo_h = photo_h photo.photo_thumbnail_path = photo_thumbnail_path_qiniu photo.photo_thumbnail_w = photo_thumbnail_w photo.photo_thumbnail_h = photo_thumbnail_h if not photo.photo_thumbnail2_path: # 单列: 1080, xx-100K photo_thumbnail2_path = photo_path.replace('.', '_thumbnail2.') photo_w, photo_h, photo_thumbnail2_w, photo_thumbnail2_h = make_thumbnail( file_abspath(photo_path), file_abspath(photo_thumbnail2_path), settings.THUMBNAIL_MAX_WIDTH2 ) if watermark and settings.WATERMARK_OR_NOT: watermark_wrap( file_abspath(photo_thumbnail2_path), settings.WATERMARK_LOGO_PATH, file_abspath(photo_thumbnail2_path) ) photo_thumbnail2_path_qiniu = upload_file_path(file_abspath(photo_thumbnail2_path), bucket='thumbnail2') photo.photo_w = photo_w photo.photo_h = photo_h photo.photo_thumbnail2_path = photo_thumbnail2_path_qiniu photo.photo_thumbnail2_w = photo_thumbnail2_w photo.photo_thumbnail2_h = photo_thumbnail2_h photo.save() # 本地删除 for path in [photo_path, photo_watermark_path, photo_thumbnail_path, photo_thumbnail2_path]: if path and default_storage.exists(path): default_storage.delete(path) return DotDict({ 'ext': ext, 'photo_md5': photo_md5, 'photo_path': photo.photo_path, 'photo_w': photo.photo_w, 'photo_h': photo.photo_h, 'photo_watermark_path': photo.photo_watermark_path, 'photo_thumbnail_path': photo.photo_thumbnail_path, 'photo_thumbnail_w': photo.photo_thumbnail_w, 'photo_thumbnail_h': photo.photo_thumbnail_h, 'photo_thumbnail2_path': photo.photo_thumbnail2_path, 'photo_thumbnail2_w': photo.photo_thumbnail2_w, 'photo_thumbnail2_h': photo.photo_thumbnail2_h, })