@@ -0,0 +1,21 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from __future__ import division |
|
| 4 |
+ |
|
| 5 |
+from django.conf import settings |
|
| 6 |
+from django_logit import logit |
|
| 7 |
+from django_response import response |
|
| 8 |
+ |
|
| 9 |
+from mch.models import SlideInfo |
|
| 10 |
+ |
|
| 11 |
+ |
|
| 12 |
+@logit |
|
| 13 |
+def slides(request): |
|
| 14 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 15 |
+ |
|
| 16 |
+ slides = SlideInfo.objects.filter(brand_id=brand_id) |
|
| 17 |
+ slides = [s.data for s in slides] |
|
| 18 |
+ |
|
| 19 |
+ return response(data={
|
|
| 20 |
+ 'slides': slides, |
|
| 21 |
+ }) |
@@ -5,7 +5,7 @@ from django_file_upload import views as file_views |
||
| 5 | 5 |
|
| 6 | 6 |
from account import tourguide_views |
| 7 | 7 |
from account import views as account_views |
| 8 |
-from api import admin_views, clerk_views, distributor_views, encrypt_views, mch_views, model_views, operator_views |
|
| 8 |
+from api import admin_views, clerk_views, distributor_views, encrypt_views, mch_views, model_views, operator_views, slide_views |
|
| 9 | 9 |
from box import views as box_views |
| 10 | 10 |
from geo import views as geo_views |
| 11 | 11 |
from group import (groupuser_views, lensman_views, tourguidegroup_views, tourguidegroupadmin_views, |
@@ -290,3 +290,7 @@ urlpatterns += [ |
||
| 290 | 290 |
url(r'^admin/queryusedsn$', admin_views.queryusedsn, name='queryusedsn'), |
| 291 | 291 |
url(r'^admin/usecoupon$', admin_views.usecoupon, name='usecoupon'), |
| 292 | 292 |
] |
| 293 |
+ |
|
| 294 |
+urlpatterns += [ |
|
| 295 |
+ url(r'^slides$', slide_views.slides, name='slides'), |
|
| 296 |
+] |
@@ -9,7 +9,7 @@ from django_models_ext import ProvinceShortModelMixin |
||
| 9 | 9 |
from pysnippets.strsnippets import strip |
| 10 | 10 |
|
| 11 | 11 |
from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, ConsumeImpressionInfo, DistributorInfo, |
| 12 |
- LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo) |
|
| 12 |
+ LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo, SlideInfo) |
|
| 13 | 13 |
|
| 14 | 14 |
|
| 15 | 15 |
class AdministratorInfoAdmin(admin.ModelAdmin): |
@@ -196,6 +196,11 @@ class ActivityInfoAdmin(admin.ModelAdmin): |
||
| 196 | 196 |
list_filter = ('coupon_expire_type', 'status')
|
| 197 | 197 |
|
| 198 | 198 |
|
| 199 |
+class SlideInfoAdmin(admin.ModelAdmin): |
|
| 200 |
+ list_display = ('brand_id', 'image', 'url', 'position', 'status', 'created_at', 'updated_at')
|
|
| 201 |
+ list_filter = ('brand_id', 'status')
|
|
| 202 |
+ |
|
| 203 |
+ |
|
| 199 | 204 |
admin.site.register(AdministratorInfo, AdministratorInfoAdmin) |
| 200 | 205 |
admin.site.register(OperatorInfo, OperatorInfoAdmin) |
| 201 | 206 |
admin.site.register(BrandInfo, BrandInfoAdmin) |
@@ -209,3 +214,4 @@ admin.site.register(LatestAppScreenInfo, LatestAppScreenInfoAdmin) |
||
| 209 | 214 |
admin.site.register(ConsumeImpressionInfo, ConsumeImpressionInfoAdmin) |
| 210 | 215 |
admin.site.register(ConsumeInfoSubmitLogInfo, ConsumeInfoSubmitLogInfoAdmin) |
| 211 | 216 |
admin.site.register(ActivityInfo, ActivityInfoAdmin) |
| 217 |
+admin.site.register(SlideInfo, SlideInfoAdmin) |
@@ -0,0 +1,33 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+# Generated by Django 1.11.22 on 2019-08-12 08:14 |
|
| 3 |
+from __future__ import unicode_literals |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+import django_models_ext.fileext |
|
| 7 |
+ |
|
| 8 |
+ |
|
| 9 |
+class Migration(migrations.Migration): |
|
| 10 |
+ |
|
| 11 |
+ dependencies = [ |
|
| 12 |
+ ('mch', '0041_auto_20190812_1429'),
|
|
| 13 |
+ ] |
|
| 14 |
+ |
|
| 15 |
+ operations = [ |
|
| 16 |
+ migrations.CreateModel( |
|
| 17 |
+ name='SlideInfo', |
|
| 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 |
+ ('brand_id', models.CharField(blank=True, db_index=True, help_text='\u54c1\u724c\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='brand_id')),
|
|
| 24 |
+ ('image', models.ImageField(blank=True, help_text='\u56fe\u7247', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='image')),
|
|
| 25 |
+ ('url', models.CharField(blank=True, help_text='\u94fe\u63a5', max_length=255, null=True, verbose_name='url')),
|
|
| 26 |
+ ('position', models.IntegerField(default=1, help_text='\u6392\u5e8f', verbose_name='position')),
|
|
| 27 |
+ ], |
|
| 28 |
+ options={
|
|
| 29 |
+ 'verbose_name': '\u8f6e\u64ad\u56fe\u4fe1\u606f', |
|
| 30 |
+ 'verbose_name_plural': '\u8f6e\u64ad\u56fe\u4fe1\u606f', |
|
| 31 |
+ }, |
|
| 32 |
+ ), |
|
| 33 |
+ ] |
@@ -745,3 +745,34 @@ class ActivityInfo(BaseModelMixin): |
||
| 745 | 745 |
|
| 746 | 746 |
def coupon_info2(self, created_at=None): |
| 747 | 747 |
return self.coupon_info(created_at=created_at), |
| 748 |
+ |
|
| 749 |
+ |
|
| 750 |
+class SlideInfo(BaseModelMixin): |
|
| 751 |
+ brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) |
|
| 752 |
+ |
|
| 753 |
+ image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'图片') |
|
| 754 |
+ url = models.CharField(_(u'url'), max_length=255, blank=True, null=True, help_text=u'链接') |
|
| 755 |
+ |
|
| 756 |
+ position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') |
|
| 757 |
+ |
|
| 758 |
+ class Meta: |
|
| 759 |
+ verbose_name = _(u'轮播图信息') |
|
| 760 |
+ verbose_name_plural = _(u'轮播图信息') |
|
| 761 |
+ |
|
| 762 |
+ def __unicode__(self): |
|
| 763 |
+ return unicode(self.pk) |
|
| 764 |
+ |
|
| 765 |
+ @property |
|
| 766 |
+ def image_path(self): |
|
| 767 |
+ return upload_file_path(self.image) |
|
| 768 |
+ |
|
| 769 |
+ @property |
|
| 770 |
+ def image_url(self): |
|
| 771 |
+ return upload_file_url(self.image) |
|
| 772 |
+ |
|
| 773 |
+ @property |
|
| 774 |
+ def data(self): |
|
| 775 |
+ return {
|
|
| 776 |
+ 'image_url': self.image_url, |
|
| 777 |
+ 'url': self.url, |
|
| 778 |
+ } |