@@ -275,6 +275,7 @@ urlpatterns += [ |
||
275 | 275 |
urlpatterns += [ |
276 | 276 |
url(r'^get_limit_scene_qrcode_url$', wx_views.get_limit_scene_qrcode_url, name='get_limit_scene_qrcode_url'), |
277 | 277 |
url(r'^get_wxa_code$', wxa_views.get_wxa_code, name='get_wxa_code'), |
278 |
+ url(r'^get_wxa_code_scene$', wxa_views.get_wxa_code_scene, name='get_wxa_code_scene'), |
|
278 | 279 |
] |
279 | 280 |
|
280 | 281 |
urlpatterns += [ |
@@ -5,6 +5,7 @@ from django_response import response |
||
5 | 5 |
from pywe_storage import RedisStorage |
6 | 6 |
from pywe_wxa_qrcode import get_wxa_code_unlimit |
7 | 7 |
|
8 |
+from miniapp.models import SceneInfo |
|
8 | 9 |
from utils.qiniucdn import qiniu_file_url, upload |
9 | 10 |
from utils.redis.connect import r |
10 | 11 |
|
@@ -16,18 +17,38 @@ def get_wxa_code(request): |
||
16 | 17 |
scene = request.POST.get('scene', '') |
17 | 18 |
page = request.POST.get('page', '') |
18 | 19 |
|
20 |
+ si, created = SceneInfo.objects.get_or_create(scene=scene, page=page, status=True) |
|
21 |
+ |
|
22 |
+ if si.qiniu_url: |
|
23 |
+ return response(data={ |
|
24 |
+ 'qiniu_url': si.qiniu_url, |
|
25 |
+ }) |
|
26 |
+ |
|
19 | 27 |
wxcfg = WECHAT.get('MINIAPP', {}) |
20 | 28 |
|
21 | 29 |
appid = wxcfg.get('appID') |
22 | 30 |
secret = wxcfg.get('appsecret') |
23 | 31 |
|
24 |
- res = get_wxa_code_unlimit(scene, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r)) |
|
32 |
+ res = get_wxa_code_unlimit(si.sid, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r)) |
|
25 | 33 |
|
26 | 34 |
if res.headers and res.headers.get('Content-disposition'): |
27 | 35 |
qiniu_url = qiniu_file_url(upload(res.content)) |
28 | 36 |
else: |
29 | 37 |
qiniu_url = '' |
30 | 38 |
|
39 |
+ si.qiniu_url = qiniu_url |
|
40 |
+ si.save() |
|
41 |
+ |
|
31 | 42 |
return response(data={ |
32 | 43 |
'qiniu_url': qiniu_url, |
33 | 44 |
}) |
45 |
+ |
|
46 |
+ |
|
47 |
+def get_wxa_code_scene(request): |
|
48 |
+ sid = request.POST.get('sid', '') |
|
49 |
+ |
|
50 |
+ scene = SceneInfo.objects.get(sid=sid, status=True) |
|
51 |
+ |
|
52 |
+ return response(data={ |
|
53 |
+ 'scene': scene.scene, |
|
54 |
+ }) |
@@ -0,0 +1,18 @@ |
||
1 |
+# Generated by Django 3.2.16 on 2022-10-27 14:30 |
|
2 |
+ |
|
3 |
+from django.db import migrations, models |
|
4 |
+ |
|
5 |
+ |
|
6 |
+class Migration(migrations.Migration): |
|
7 |
+ |
|
8 |
+ dependencies = [ |
|
9 |
+ ('member', '0048_merge_20221027_2056'), |
|
10 |
+ ] |
|
11 |
+ |
|
12 |
+ operations = [ |
|
13 |
+ migrations.AlterField( |
|
14 |
+ model_name='memberactivityinfo', |
|
15 |
+ name='limit_image_num', |
|
16 |
+ field=models.IntegerField(default=0, help_text='限制图片数量', verbose_name='limit_image_num'), |
|
17 |
+ ), |
|
18 |
+ ] |
@@ -1,4 +1,13 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
1 | 3 |
from django.contrib import admin |
2 | 4 |
|
5 |
+from miniapp.models import SceneInfo |
|
6 |
+ |
|
7 |
+ |
|
8 |
+class SceneInfoAdmin(admin.ModelAdmin): |
|
9 |
+ list_display = ('sid', 'scene', 'page', 'qiniu_url', 'status', 'created_at', 'updated_at') |
|
10 |
+ list_filter = ('status', ) |
|
11 |
+ |
|
3 | 12 |
|
4 |
-# Register your models here. |
|
13 |
+admin.site.register(SceneInfo, SceneInfoAdmin) |
@@ -0,0 +1,33 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 3.2.16 on 2022-10-27 14:30 |
|
3 |
+ |
|
4 |
+from django.db import migrations, models |
|
5 |
+import shortuuidfield.fields |
|
6 |
+ |
|
7 |
+ |
|
8 |
+class Migration(migrations.Migration): |
|
9 |
+ |
|
10 |
+ initial = True |
|
11 |
+ |
|
12 |
+ dependencies = [ |
|
13 |
+ ] |
|
14 |
+ |
|
15 |
+ operations = [ |
|
16 |
+ migrations.CreateModel( |
|
17 |
+ name='SceneInfo', |
|
18 |
+ fields=[ |
|
19 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|
20 |
+ ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')), |
|
21 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), |
|
22 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), |
|
23 |
+ ('sid', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='Sid', max_length=22, null=True, unique=True)), |
|
24 |
+ ('scene', models.CharField(blank=True, help_text='Scene', max_length=255, null=True, verbose_name='scene')), |
|
25 |
+ ('page', models.CharField(blank=True, help_text='Page', max_length=255, null=True, verbose_name='page')), |
|
26 |
+ ('qiniu_url', models.CharField(blank=True, help_text='七牛链接', max_length=255, null=True, verbose_name='qiniu_url')), |
|
27 |
+ ], |
|
28 |
+ options={ |
|
29 |
+ 'verbose_name': 'Scene', |
|
30 |
+ 'verbose_name_plural': 'Scene', |
|
31 |
+ }, |
|
32 |
+ ), |
|
33 |
+ ] |
@@ -1,4 +1,24 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
1 | 3 |
from django.db import models |
4 |
+from django.utils.translation import ugettext_lazy as _ |
|
5 |
+from django_models_ext import BaseModelMixin |
|
6 |
+from shortuuidfield import ShortUUIDField |
|
7 |
+ |
|
8 |
+ |
|
9 |
+class SceneInfo(BaseModelMixin): |
|
10 |
+ sid = ShortUUIDField(_(u'sid'), max_length=32, blank=True, null=True, help_text=u'Sid', db_index=True, unique=True) |
|
11 |
+ scene = models.CharField(_(u'scene'), max_length=255, blank=True, null=True, help_text=u'Scene') |
|
12 |
+ page = models.CharField(_(u'page'), max_length=255, blank=True, null=True, help_text=u'Page') |
|
13 |
+ qiniu_url = models.CharField(_(u'qiniu_url'), max_length=255, blank=True, null=True, help_text=u'七牛链接') |
|
14 |
+ |
|
15 |
+ class Meta: |
|
16 |
+ verbose_name = _(u'Scene') |
|
17 |
+ verbose_name_plural = _(u'Scene') |
|
2 | 18 |
|
19 |
+ unique_together = ( |
|
20 |
+ ('scene', 'page'), |
|
21 |
+ ) |
|
3 | 22 |
|
4 |
-# Create your models here. |
|
23 |
+ def __unicode__(self): |
|
24 |
+ return '%d' % self.pk |