add api online_api

Brightcells 8 years ago
parent
commit
dd00e3b1a9

+ 1 - 1
account/views.py

@@ -13,7 +13,7 @@ from operation.models import GuestEntranceControlInfo
13 13
 from utils.error.errno_utils import LensmanStatusCode, UserStatusCode
14 14
 from utils.error.response_utils import response
15 15
 from utils.ip_utils import ip_addr
16
-from utils.redis.rversion import get_guest_entrance_control
16
+from utils.redis.rguest import get_guest_entrance_control
17 17
 from utils.version_utils import is_version_match
18 18
 
19 19
 

+ 1 - 0
api/urls.py

@@ -95,6 +95,7 @@ urlpatterns += [
95 95
 # 系统相关
96 96
 urlpatterns += [
97 97
     url(r'^op/upgrade$', op_views.upgrade_api, name='upgrade_api'),  # APP 升级
98
+    url(r'^op/online$', op_views.online_api, name='online_api'),  # 是否上线
98 99
     url(r'^op/splash$', op_views.splash_api, name='splash_api'),  # 启动页面
99 100
     url(r'^op/feedback$', op_views.feedback_api, name='feedback_api'),  # 用户反馈
100 101
     url(r'^op/download$', op_views.download_api, name='download_api'),  # 下载接口

+ 21 - 2
operation/admin.py

@@ -4,10 +4,11 @@ from django.conf import settings
4 4
 from django.contrib import admin
5 5
 from django.template.loader import render_to_string
6 6
 
7
-from operation.models import FeedbackInfo, GuestEntranceControlInfo, LatestAppInfo, SplashInfo
7
+from operation.models import APPSettingsInfo, FeedbackInfo, GuestEntranceControlInfo, LatestAppInfo, SplashInfo
8 8
 from utils.disk_utils import write_to_disk
9 9
 from utils.redis.rapp import set_latest_app
10
-from utils.redis.rversion import delete_guest_entrance_control, set_guest_entrance_control
10
+from utils.redis.rguest import delete_guest_entrance_control, set_guest_entrance_control
11
+from utils.redis.rsettings import del_app_settings_info, set_app_settings_info
11 12
 
12 13
 
13 14
 class LatestAppInfoAdmin(admin.ModelAdmin):
@@ -32,6 +33,23 @@ class LatestAppInfoAdmin(admin.ModelAdmin):
32 33
         set_latest_app(obj.src)
33 34
 
34 35
 
36
+class APPSettingsInfoAdmin(admin.ModelAdmin):
37
+    list_display = ('platform', 'channel', 'version', 'online', 'status', 'created_at', 'updated_at')
38
+    list_filter = ('platform', 'online', 'status')
39
+
40
+    def save_model(self, request, obj, form, change):
41
+        obj.save()
42
+
43
+        # 设置 APP 设置信息
44
+        set_app_settings_info(obj)
45
+
46
+    def delete_model(self, request, obj):
47
+        obj.delete()
48
+
49
+        # 删除 APP 设置信息
50
+        del_app_settings_info(obj)
51
+
52
+
35 53
 class SplashInfoAdmin(admin.ModelAdmin):
36 54
     list_display = ('splash_image', 'spalash_image_airtime', 'spalash_image_deadline', 'src', 'status', 'created_at', 'updated_at')
37 55
     list_filter = ('src', 'status')
@@ -59,6 +77,7 @@ class GuestEntranceControlInfoAdmin(admin.ModelAdmin):
59 77
 
60 78
 
61 79
 admin.site.register(LatestAppInfo, LatestAppInfoAdmin)
80
+admin.site.register(APPSettingsInfo, APPSettingsInfoAdmin)
62 81
 admin.site.register(SplashInfo, SplashInfoAdmin)
63 82
 admin.site.register(FeedbackInfo, FeedbackInfoAdmin)
64 83
 admin.site.register(GuestEntranceControlInfo, GuestEntranceControlInfoAdmin)

+ 31 - 0
operation/migrations/0008_appsettingsinfo.py

@@ -0,0 +1,31 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('operation', '0007_auto_20160907_1740'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.CreateModel(
15
+            name='APPSettingsInfo',
16
+            fields=[
17
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
18
+                ('status', models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status')),
19
+                ('created_at', models.DateTimeField(help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at', auto_now_add=True)),
20
+                ('updated_at', models.DateTimeField(help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at', auto_now=True)),
21
+                ('platform', models.IntegerField(default=0, help_text='\u652f\u6301\u5e73\u53f0', db_index=True, verbose_name='plat', choices=[(0, '\u5168\u5e73\u53f0'), (1, 'Android'), (2, 'iOS')])),
22
+                ('channel', models.CharField(help_text='\u6e20\u9053', max_length=255, null=True, verbose_name='channel', blank=True)),
23
+                ('version', models.CharField(help_text='\u7248\u672c', max_length=255, null=True, verbose_name='version', blank=True)),
24
+                ('online', models.BooleanField(default=True, help_text='\u662f\u5426\u4e0a\u7ebf', verbose_name='online')),
25
+            ],
26
+            options={
27
+                'verbose_name': 'appsettingsinfo',
28
+                'verbose_name_plural': 'appsettingsinfo',
29
+            },
30
+        ),
31
+    ]

+ 20 - 0
operation/models.py

@@ -65,6 +65,26 @@ class LatestAppInfo(CreateUpdateMixin):
65 65
         }
66 66
 
67 67
 
68
+class APPSettingsInfo(CreateUpdateMixin, PlatformMixin):
69
+    channel = models.CharField(_(u'channel'), max_length=255, blank=True, null=True, help_text=u'渠道')
70
+    version = models.CharField(_(u'version'), max_length=255, blank=True, null=True, help_text=u'版本')
71
+
72
+    online = models.BooleanField(_(u'online'), default=True, help_text=u'是否上线')
73
+
74
+    class Meta:
75
+        verbose_name = _('appsettingsinfo')
76
+        verbose_name_plural = _('appsettingsinfo')
77
+
78
+    def __unicode__(self):
79
+        return u'{0.pk}'.format(self)
80
+
81
+    @property
82
+    def data(self):
83
+        return {
84
+            'online': self.online,
85
+        }
86
+
87
+
68 88
 class SplashInfo(CreateUpdateMixin):
69 89
     PAIAI_USER = 0
70 90
     PAIAI_LENSMAN = 1

+ 18 - 0
operation/views.py

@@ -9,6 +9,7 @@ from operation.models import FeedbackInfo, SplashInfo
9 9
 from utils.error.errno_utils import UserStatusCode
10 10
 from utils.error.response_utils import response
11 11
 from utils.redis.rapp import get_latest_app
12
+from utils.redis.rsettings import get_app_settings_info
12 13
 
13 14
 
14 15
 @logit
@@ -40,6 +41,23 @@ def upgrade_api(request):
40 41
     })
41 42
 
42 43
 
44
+def online_api(request):
45
+    """
46
+    是否上线
47
+    :param request:
48
+    :return:
49
+    """
50
+    platform = request.REQUEST.get('platform', '')
51
+    channel = request.REQUEST.get('channel', '')
52
+    version = request.REQUEST.get('version', '')
53
+
54
+    app_settings = get_app_settings_info(platform, channel, version)
55
+
56
+    return response(200, 'Get Online Status Success', u'获取是否上线成功', {
57
+        'online': app_settings.get('online', True),
58
+    })
59
+
60
+
43 61
 @logit
44 62
 def splash_api(request):
45 63
     """

+ 6 - 0
pai2/basemodels.py

@@ -31,6 +31,12 @@ class PlatformMixin(models.Model):
31 31
     class Meta:
32 32
         abstract = True
33 33
 
34
+    Platforms = {
35
+        'iOS': IOS,
36
+        'android': ADR,
37
+        'Android': ADR,
38
+    }
39
+
34 40
 
35 41
 class VersionMixin(models.Model):
36 42
     min_adr = models.CharField(_(u'min_adr'), max_length=255, blank=True, null=True, help_text=u'Adr 最低版本')

utils/redis/rversion.py → utils/redis/rguest.py


+ 1 - 0
utils/redis/rkeys.py

@@ -52,3 +52,4 @@ GUEST_ENTRANCE_CONTROL_INFO = 'guest:entrance:control:info'  # STRING,游客
52 52
 
53 53
 # APP 相关
54 54
 LATEST_APP_INFO = 'latest:app:info:%s'  # STRING,最新 APP 信息,src
55
+APP_SETTINGS_INFO = 'app:settings:info:%s:%s:%s'  # STRING,APP 设置信息,platform、channel、version

+ 28 - 0
utils/redis/rsettings.py

@@ -0,0 +1,28 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+import json
4
+
5
+from django.conf import settings
6
+
7
+from pai2.basemodels import PlatformMixin
8
+from utils.redis.rkeys import APP_SETTINGS_INFO
9
+
10
+
11
+r = settings.REDIS_CACHE
12
+
13
+
14
+def set_app_settings_info(appset):
15
+    """ 设置 APP 设置信息 """
16
+    r.set(APP_SETTINGS_INFO % (appset.platform, appset.channel, appset.version), json.dumps(appset.data))
17
+
18
+
19
+def del_app_settings_info(appset):
20
+    """ 删除 APP 设置信息 """
21
+    r.delete(APP_SETTINGS_INFO % (appset.platform, appset.channel, appset.version))
22
+
23
+
24
+def get_app_settings_info(platform, channel, version):
25
+    """ 获取 APP 设置信息 """
26
+    if type(platform) != int:
27
+        platform = PlatformMixin.Platforms[platform]
28
+    return json.loads(r.get(APP_SETTINGS_INFO % (platform, channel, version)) or '{}')