@@ -3,10 +3,12 @@ |
||
| 3 | 3 |
from __future__ import division |
| 4 | 4 |
|
| 5 | 5 |
from django_response import response |
| 6 |
+from logit import logit |
|
| 6 | 7 |
|
| 7 |
-from mch.models import BrandInfo, DistributorInfo, ModelInfo |
|
| 8 |
+from mch.models import BrandInfo, DistributorInfo, LatestAppInfo, ModelInfo |
|
| 8 | 9 |
|
| 9 | 10 |
|
| 11 |
+@logit |
|
| 10 | 12 |
def brands_list(request): |
| 11 | 13 |
brands = BrandInfo.objects.filter(status=True).order_by('position')
|
| 12 | 14 |
brands = [brand.data for brand in brands] |
@@ -16,6 +18,7 @@ def brands_list(request): |
||
| 16 | 18 |
}) |
| 17 | 19 |
|
| 18 | 20 |
|
| 21 |
+@logit |
|
| 19 | 22 |
def models_list(request): |
| 20 | 23 |
models = ModelInfo.objects.filter(status=True).order_by('position')
|
| 21 | 24 |
models = [model.data for model in models] |
@@ -25,6 +28,7 @@ def models_list(request): |
||
| 25 | 28 |
}) |
| 26 | 29 |
|
| 27 | 30 |
|
| 31 |
+@logit |
|
| 28 | 32 |
def distributors_list(request): |
| 29 | 33 |
distributors = DistributorInfo.objects.filter(status=True).order_by('position')
|
| 30 | 34 |
distributors = [distributor.data for distributor in distributors] |
@@ -32,3 +36,20 @@ def distributors_list(request): |
||
| 32 | 36 |
return response(200, data={
|
| 33 | 37 |
'distributors': distributors, |
| 34 | 38 |
}) |
| 39 |
+ |
|
| 40 |
+ |
|
| 41 |
+@logit |
|
| 42 |
+def upgrade_api(request): |
|
| 43 |
+ """ APP 升级 """ |
|
| 44 |
+ try: |
|
| 45 |
+ appinfo = LatestAppInfo.objects.filter(status=True)[0].adr |
|
| 46 |
+ except IndexError: |
|
| 47 |
+ appinfo = {
|
|
| 48 |
+ 'latest_version_code': '', |
|
| 49 |
+ 'latest_version_name': '', |
|
| 50 |
+ 'latest_url': '', |
|
| 51 |
+ } |
|
| 52 |
+ |
|
| 53 |
+ return response(200, 'Get Latest App Success', u'获取最新版信息成功', {
|
|
| 54 |
+ 'appinfo': appinfo, |
|
| 55 |
+ }) |
@@ -194,3 +194,7 @@ urlpatterns += [ |
||
| 194 | 194 |
url(r'^api/encrypt$', encrypt_views.encrypt, name='encrypt'), |
| 195 | 195 |
url(r'^api/decrypt$', encrypt_views.decrypt, name='decrypt'), |
| 196 | 196 |
] |
| 197 |
+ |
|
| 198 |
+urlpatterns += [ |
|
| 199 |
+ url(r'^api/upgrade$', mch_views.upgrade_api, name='upgrade_api2'), # APP 升级 |
|
| 200 |
+] |
@@ -1,8 +1,9 @@ |
||
| 1 | 1 |
# -*- coding: utf-8 -*- |
| 2 | 2 |
|
| 3 | 3 |
from django.contrib import admin |
| 4 |
+from pysnippets.strsnippets import strip |
|
| 4 | 5 |
|
| 5 |
-from mch.models import BrandInfo, DistributorInfo, ModelImageInfo, ModelInfo |
|
| 6 |
+from mch.models import BrandInfo, DistributorInfo, LatestAppInfo, ModelImageInfo, ModelInfo |
|
| 6 | 7 |
|
| 7 | 8 |
|
| 8 | 9 |
class BrandInfoAdmin(admin.ModelAdmin): |
@@ -24,7 +25,19 @@ class DistributorInfoAdmin(admin.ModelAdmin): |
||
| 24 | 25 |
list_filter = ('brand_id', 'status')
|
| 25 | 26 |
|
| 26 | 27 |
|
| 28 |
+class LatestAppInfoAdmin(admin.ModelAdmin): |
|
| 29 |
+ list_display = ('latest_adr_version_code', 'latest_adr_version_name', 'latest_adr_app', 'latest_adr_url', 'status', 'created_at', 'updated_at')
|
|
| 30 |
+ list_filter = ('status', )
|
|
| 31 |
+ |
|
| 32 |
+ def save_model(self, request, obj, form, change): |
|
| 33 |
+ obj.latest_adr_version_name = strip(obj.latest_adr_version_name) |
|
| 34 |
+ obj.latest_adr_app = strip(obj.latest_adr_app) |
|
| 35 |
+ obj.latest_adr_url = strip(obj.latest_adr_url) |
|
| 36 |
+ obj.save() |
|
| 37 |
+ |
|
| 38 |
+ |
|
| 27 | 39 |
admin.site.register(BrandInfo, BrandInfoAdmin) |
| 28 | 40 |
admin.site.register(ModelInfo, ModelInfoAdmin) |
| 29 | 41 |
admin.site.register(ModelImageInfo, ModelImageInfoAdmin) |
| 30 | 42 |
admin.site.register(DistributorInfo, DistributorInfoAdmin) |
| 43 |
+admin.site.register(LatestAppInfo, LatestAppInfoAdmin) |
@@ -0,0 +1,36 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+# Generated by Django 1.11.9 on 2018-01-14 15:14 |
|
| 3 |
+from __future__ import unicode_literals |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+import models_ext.fileext |
|
| 7 |
+ |
|
| 8 |
+ |
|
| 9 |
+class Migration(migrations.Migration): |
|
| 10 |
+ |
|
| 11 |
+ dependencies = [ |
|
| 12 |
+ ('mch', '0003_auto_20180104_0428'),
|
|
| 13 |
+ ] |
|
| 14 |
+ |
|
| 15 |
+ operations = [ |
|
| 16 |
+ migrations.CreateModel( |
|
| 17 |
+ name='LatestAppInfo', |
|
| 18 |
+ fields=[ |
|
| 19 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
| 20 |
+ ('status', models.BooleanField(db_index=True, 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 |
+ ('latest_adr_version_code', models.IntegerField(default=0, help_text='\u6700\u65b0\u5b89\u5353\u7248\u672c\u53f7', verbose_name='latest_adr_version_code')),
|
|
| 24 |
+ ('latest_adr_version_name', models.CharField(blank=True, help_text='\u6700\u65b0\u5b89\u5353\u7248\u672c\u540d', max_length=16, null=True, verbose_name='latest_adr_version_name')),
|
|
| 25 |
+ ('latest_adr_app', models.FileField(blank=True, help_text='\u6700\u65b0\u7248\u5b89\u5353 APP', null=True, upload_to=models_ext.fileext.upload_path, verbose_name='latest_adr_app')),
|
|
| 26 |
+ ('latest_adr_url', models.URLField(blank=True, help_text='\u6700\u65b0\u7248 APP \u94fe\u63a5', max_length=255, null=True, verbose_name='latest_adr_url')),
|
|
| 27 |
+ ('latest_ios_version_code', models.IntegerField(default=0, help_text='\u6700\u65b0 iOS \u7248\u672c\u53f7', verbose_name='latest_ios_version_code')),
|
|
| 28 |
+ ('latest_ios_version_name', models.CharField(blank=True, help_text='\u6700\u65b0 iOS \u7248\u672c\u540d', max_length=16, null=True, verbose_name='latest_ios_version_name')),
|
|
| 29 |
+ ('latest_ios_url', models.URLField(blank=True, help_text='\u6700\u65b0\u7248 iOS \u94fe\u63a5', max_length=255, null=True, verbose_name='latest_ios_url')),
|
|
| 30 |
+ ], |
|
| 31 |
+ options={
|
|
| 32 |
+ 'verbose_name': '\u5347\u7ea7\u914d\u7f6e\u4fe1\u606f', |
|
| 33 |
+ 'verbose_name_plural': '\u5347\u7ea7\u914d\u7f6e\u4fe1\u606f', |
|
| 34 |
+ }, |
|
| 35 |
+ ), |
|
| 36 |
+ ] |
@@ -115,3 +115,44 @@ class DistributorInfo(BaseModelMixin): |
||
| 115 | 115 |
'distributor_name': self.distributor_name, |
| 116 | 116 |
'distributor_descr': self.distributor_descr, |
| 117 | 117 |
} |
| 118 |
+ |
|
| 119 |
+ |
|
| 120 |
+class LatestAppInfo(BaseModelMixin): |
|
| 121 |
+ latest_adr_version_code = models.IntegerField(_(u'latest_adr_version_code'), default=0, help_text=u'最新安卓版本号') |
|
| 122 |
+ latest_adr_version_name = models.CharField(_(u'latest_adr_version_name'), max_length=16, blank=True, null=True, help_text=u'最新安卓版本名') |
|
| 123 |
+ latest_adr_app = models.FileField(_(u'latest_adr_app'), upload_to=upload_path, blank=True, null=True, help_text=u'最新版安卓 APP') |
|
| 124 |
+ latest_adr_url = models.URLField(_(u'latest_adr_url'), max_length=255, blank=True, null=True, help_text=u'最新版 APP 链接') |
|
| 125 |
+ |
|
| 126 |
+ latest_ios_version_code = models.IntegerField(_(u'latest_ios_version_code'), default=0, help_text=u'最新 iOS 版本号') |
|
| 127 |
+ latest_ios_version_name = models.CharField(_(u'latest_ios_version_name'), max_length=16, blank=True, null=True, help_text=u'最新 iOS 版本名') |
|
| 128 |
+ latest_ios_url = models.URLField(_(u'latest_ios_url'), max_length=255, blank=True, null=True, help_text=u'最新版 iOS 链接') |
|
| 129 |
+ |
|
| 130 |
+ class Meta: |
|
| 131 |
+ verbose_name = _(u'升级配置信息') |
|
| 132 |
+ verbose_name_plural = _(u'升级配置信息') |
|
| 133 |
+ |
|
| 134 |
+ def __unicode__(self): |
|
| 135 |
+ return u'{0.pk}'.format(self)
|
|
| 136 |
+ |
|
| 137 |
+ @property |
|
| 138 |
+ def final_latest_adr_url(self): |
|
| 139 |
+ return self.latest_adr_url or upload_file_url(self.latest_adr_app) |
|
| 140 |
+ |
|
| 141 |
+ @property |
|
| 142 |
+ def data(self): |
|
| 143 |
+ return {
|
|
| 144 |
+ 'latest_adr_version_code': self.latest_adr_version_code, |
|
| 145 |
+ 'latest_adr_version_name': self.latest_adr_version_name, |
|
| 146 |
+ 'latest_adr_url': self.final_latest_adr_url, |
|
| 147 |
+ 'latest_ios_version_code': self.latest_ios_version_code, |
|
| 148 |
+ 'latest_ios_version_name': self.latest_ios_version_name, |
|
| 149 |
+ 'latest_ios_url': self.latest_ios_url, |
|
| 150 |
+ } |
|
| 151 |
+ |
|
| 152 |
+ @property |
|
| 153 |
+ def adr(self): |
|
| 154 |
+ return {
|
|
| 155 |
+ 'latest_adr_version_code': self.latest_adr_version_code, |
|
| 156 |
+ 'latest_adr_version_name': self.latest_adr_version_name, |
|
| 157 |
+ 'latest_adr_url': self.final_latest_adr_url, |
|
| 158 |
+ } |
@@ -0,0 +1,25 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+# Generated by Django 1.11.9 on 2018-01-14 15:14 |
|
| 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 |
+ ('operation', '0017_auto_20180103_0446'),
|
|
| 12 |
+ ] |
|
| 13 |
+ |
|
| 14 |
+ operations = [ |
|
| 15 |
+ migrations.AlterField( |
|
| 16 |
+ model_name='latestappinfo', |
|
| 17 |
+ name='latest_adr_version_name', |
|
| 18 |
+ field=models.CharField(blank=True, help_text='\u6700\u65b0\u5b89\u5353\u7248\u672c\u540d', max_length=16, null=True, verbose_name='latest_adr_version_name'), |
|
| 19 |
+ ), |
|
| 20 |
+ migrations.AlterField( |
|
| 21 |
+ model_name='latestappinfo', |
|
| 22 |
+ name='latest_ios_version_name', |
|
| 23 |
+ field=models.CharField(blank=True, help_text='\u6700\u65b0 iOS \u7248\u672c\u540d', max_length=16, null=True, verbose_name='latest_ios_version_name'), |
|
| 24 |
+ ), |
|
| 25 |
+ ] |
@@ -9,12 +9,12 @@ from pai2.basemodels import PaiaiSrcMixin, PlatformMixin, VersionMixin |
||
| 9 | 9 |
|
| 10 | 10 |
class LatestAppInfo(BaseModelMixin, PaiaiSrcMixin): |
| 11 | 11 |
latest_adr_version_code = models.IntegerField(_(u'latest_adr_version_code'), default=0, help_text=u'最新安卓版本号') |
| 12 |
- latest_adr_version_name = models.CharField(_(u'latest_adr_version_name'), max_length=255, blank=True, null=True, help_text=u'最新安卓版本名') |
|
| 12 |
+ latest_adr_version_name = models.CharField(_(u'latest_adr_version_name'), max_length=16, blank=True, null=True, help_text=u'最新安卓版本名') |
|
| 13 | 13 |
latest_adr_app = models.FileField(_(u'latest_adr_app'), upload_to=upload_path, blank=True, null=True, help_text=u'最新版安卓 APP') |
| 14 | 14 |
latest_adr_url = models.URLField(_(u'latest_adr_url'), max_length=255, blank=True, null=True, help_text=u'最新版 APP 链接') |
| 15 | 15 |
|
| 16 | 16 |
latest_ios_version_code = models.IntegerField(_(u'latest_ios_version_code'), default=0, help_text=u'最新 iOS 版本号') |
| 17 |
- latest_ios_version_name = models.CharField(_(u'latest_ios_version_name'), max_length=255, blank=True, null=True, help_text=u'最新 iOS 版本名') |
|
| 17 |
+ latest_ios_version_name = models.CharField(_(u'latest_ios_version_name'), max_length=16, blank=True, null=True, help_text=u'最新 iOS 版本名') |
|
| 18 | 18 |
latest_ios_url = models.URLField(_(u'latest_ios_url'), max_length=255, blank=True, null=True, help_text=u'最新版 iOS 链接') |
| 19 | 19 |
|
| 20 | 20 |
class Meta: |