:art: Support get wxa_code scene

huangqimin001 2 年之前
父節點
當前提交
8fefe4c871
共有 6 個文件被更改,包括 105 次插入3 次删除
  1. 1 0
      api/urls.py
  2. 22 1
      api/wxa_views.py
  3. 18 0
      member/migrations/0049_alter_memberactivityinfo_limit_image_num.py
  4. 10 1
      miniapp/admin.py
  5. 33 0
      miniapp/migrations/0001_initial.py
  6. 21 1
      miniapp/models.py

+ 1 - 0
api/urls.py

@@ -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 += [

+ 22 - 1
api/wxa_views.py

@@ -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
+    })

+ 18 - 0
member/migrations/0049_alter_memberactivityinfo_limit_image_num.py

@@ -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
+    ]

+ 10 - 1
miniapp/admin.py

@@ -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)

+ 33 - 0
miniapp/migrations/0001_initial.py

@@ -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
+    ]

+ 21 - 1
miniapp/models.py

@@ -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