Logfile Upload

Brightcells 7 lat temu
rodzic
commit
5fdb5b42fd

+ 1 - 1
api/encrypt_views.py

@@ -7,7 +7,7 @@ import random
7 7
 from django_logit import logit
8 8
 from django_response import response
9 9
 
10
-from mch.models import BrandInfo, ModelImageInfo, ModelInfo
10
+from mch.models import BrandInfo, ModelInfo
11 11
 from utils.algorithm.b64 import b64_decrypt, b64_encrypt
12 12
 from utils.algorithm.caesar import caesar_decrypt, caesar_encrypt
13 13
 from utils.algorithm.rsalg import rsa_decrypt, rsa_encrypt

+ 10 - 0
api/mch_views.py

@@ -26,6 +26,11 @@ WECHAT = settings.WECHAT
26 26
 
27 27
 @logit
28 28
 def optor_login_api(request):
29
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
30
+
31
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
32
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
33
+
29 34
     phone = request.POST.get('phone', '')
30 35
     password = request.POST.get('password', '')
31 36
 
@@ -47,6 +52,11 @@ def optor_login_api(request):
47 52
 
48 53
 @logit
49 54
 def admin_login_api(request):
55
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
56
+
57
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
58
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
59
+
50 60
     phone = request.POST.get('phone', '')
51 61
     password = request.POST.get('password', '')
52 62
 

+ 2 - 0
api/urls.py

@@ -198,6 +198,8 @@ urlpatterns += [
198 198
     url(r'^models$', mch_views.models_list, name='models_list'),
199 199
     url(r'^distributors$', mch_views.distributors_list, name='distributors_list'),
200 200
     url(r'^infos$', mch_views.bmd_infos, name='bmd_infos'),
201
+
202
+    url(r'^log/upload$', file_views.file_upload, name='log_upload'),
201 203
 ]
202 204
 
203 205
 urlpatterns += [

+ 16 - 0
kodo/oauth_settings.py

@@ -42,3 +42,19 @@ def DJANGO_WE_MESSAGE_CALLBACK_FUNC(request, data):
42 42
         UserInfo.objects.filter(unionid=unionid).update(has_membercard=True, membercardid=membercardid)
43 43
     elif event == 'user_del_card':
44 44
         UserInfo.objects.filter(membercardid=membercardid).update(has_membercard=False)
45
+
46
+
47
+def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):
48
+    """ DJANGO FILE UPLOAD Callback Func """
49
+    from logs.models import MchLogInfo
50
+    file_type = request.POST.get('file_type', '')
51
+
52
+    if file_type == 'logfile':
53
+        optor_id = request.POST.get('optor_id', '')
54
+        version = request.POST.get('version', 0)
55
+
56
+        MchLogInfo.objects.create(
57
+            log_file=file_path,
58
+            operator_id=optor_id,
59
+            app_version=version,
60
+        )

+ 1 - 0
kodo/settings.py

@@ -54,6 +54,7 @@ INSTALLED_APPS = (
54 54
     'box',
55 55
     'group',
56 56
     'integral',
57
+    'logs',
57 58
     'mch',
58 59
     'message',
59 60
     'miniapp',

+ 0 - 0
logs/__init__.py


+ 15 - 0
logs/admin.py

@@ -0,0 +1,15 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.contrib import admin
4
+from django_admin import ReadOnlyModelAdmin
5
+
6
+from logs.models import MchLogInfo
7
+
8
+
9
+class MchLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
10
+    list_display = ('log_id', 'log_file', 'operator_id', 'app_version', 'status', 'created_at', 'updated_at')
11
+    list_filter = ('operator_id', 'app_version', 'status')
12
+    search_fields = ('operator_id', 'app_version')
13
+
14
+
15
+admin.site.register(MchLogInfo, MchLogInfoAdmin)

+ 8 - 0
logs/apps.py

@@ -0,0 +1,8 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.apps import AppConfig
5
+
6
+
7
+class LogsConfig(AppConfig):
8
+    name = 'logs'

+ 35 - 0
logs/migrations/0001_initial.py

@@ -0,0 +1,35 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.11 on 2018-05-30 03:09
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+import django_models_ext.fileext
7
+import shortuuidfield.fields
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    initial = True
13
+
14
+    dependencies = [
15
+    ]
16
+
17
+    operations = [
18
+        migrations.CreateModel(
19
+            name='MchLogInfo',
20
+            fields=[
21
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
22
+                ('status', models.BooleanField(db_index=True, default=True, help_text='Status', verbose_name='status')),
23
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
24
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
25
+                ('log_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='\u65e5\u5fd7\u552f\u4e00\u6807\u8bc6', max_length=22)),
26
+                ('log_file', models.FileField(blank=True, help_text='\u65e5\u5fd7\u6587\u4ef6', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='log_file')),
27
+                ('operator_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='\u64cd\u4f5c\u5458\u552f\u4e00\u6807\u8bc6', max_length=22, null=True)),
28
+                ('app_version', models.IntegerField(db_index=True, default=0, help_text='APP \u7248\u672c\u53f7', verbose_name='app_version')),
29
+            ],
30
+            options={
31
+                'verbose_name': 'mchloginfo',
32
+                'verbose_name_plural': 'mchloginfo',
33
+            },
34
+        ),
35
+    ]

+ 20 - 0
logs/migrations/0002_auto_20180530_1122.py

@@ -0,0 +1,20 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.11 on 2018-05-30 03:22
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('logs', '0001_initial'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AlterField(
16
+            model_name='mchloginfo',
17
+            name='operator_id',
18
+            field=models.CharField(blank=True, db_index=True, help_text='\u64cd\u4f5c\u5458\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='operator_id'),
19
+        ),
20
+    ]

+ 0 - 0
logs/migrations/__init__.py


+ 22 - 0
logs/models.py

@@ -0,0 +1,22 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.db import models
4
+from django.utils.translation import ugettext_lazy as _
5
+from django_models_ext import BaseModelMixin, upload_file_url, upload_path
6
+from shortuuidfield import ShortUUIDField
7
+
8
+
9
+class MchLogInfo(BaseModelMixin):
10
+    log_id = ShortUUIDField(_(u'log_id'), max_length=32, help_text=u'日志唯一标识', db_index=True)
11
+    log_file = models.FileField(_(u'log_file'), upload_to=upload_path, blank=True, null=True, help_text=u'日志文件')
12
+
13
+    operator_id = models.CharField(_(u'operator_id'), max_length=32, blank=True, null=True, help_text=u'操作员唯一标识', db_index=True)
14
+
15
+    app_version = models.IntegerField(_(u'app_version'), default=0, help_text=u'APP 版本号', db_index=True)
16
+
17
+    class Meta:
18
+        verbose_name = _(u'mchloginfo')
19
+        verbose_name_plural = _(u'mchloginfo')
20
+
21
+    def __unicode__(self):
22
+        return unicode(self.pk)

+ 7 - 0
logs/tests.py

@@ -0,0 +1,7 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.test import TestCase
5
+
6
+
7
+# Create your tests here.

+ 7 - 0
logs/views.py

@@ -0,0 +1,7 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.shortcuts import render
5
+
6
+
7
+# Create your views here.

+ 6 - 0
miniapp/views.py

@@ -13,6 +13,7 @@ from TimeConvert import TimeConvert as tc
13 13
 
14 14
 from account.models import UserInfo
15 15
 from statistic.models import RegisterStatisticInfo
16
+from utils.error.errno_utils import ProductBrandStatusCode
16 17
 from utils.redis.connect import r
17 18
 from utils.redis.rprofile import set_profile_info
18 19
 
@@ -23,6 +24,11 @@ WECHAT = settings.WECHAT
23 24
 @logit
24 25
 @transaction.atomic
25 26
 def get_userinfo_api(request):
27
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
28
+
29
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
30
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
31
+
26 32
     wxcfg = WECHAT.get('MINIAPP', {})
27 33
 
28 34
     appid = wxcfg.get('appID')

+ 1 - 0
utils/error/errno_utils.py

@@ -18,6 +18,7 @@ class SaleclerkStatusCode(BaseStatusCode):
18 18
 class ProductBrandStatusCode(BaseStatusCode):
19 19
     """ 品牌相关错误码 5010xx """
20 20
     BRAND_NOT_FOUND = StatusCodeField(501001, 'Brand Not Found', description=u'品牌不存在')
21
+    BRAND_NOT_MATCH = StatusCodeField(501011, 'Brand Not Match', description=u'品牌不匹配')
21 22
 
22 23
 
23 24
 class ProductModelStatusCode(BaseStatusCode):