@@ -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 |
|
@@ -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'), # 下载接口 |
@@ -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) |
@@ -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 |
+ ] |
@@ -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 |
@@ -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 |
""" |
@@ -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 最低版本') |
@@ -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 |
@@ -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 '{}') |