">
         return img_url(self.group_avatar)
60 63
 
61 64
     @property
65
+    def group_attentions_url(self):
66
+        return img_url(self.attentions_path)
67
+
68
+    @property
69
+    def group_schedules_url(self):
70
+        return img_url(self.schedules_path)
71
+
72
+    @property
62 73
     def data(self):
63 74
         return {
64 75
             'group_id': self.group_id,
@@ -79,8 +90,10 @@ class GroupInfo(CreateUpdateMixin):
79 90
             'gather_lon': self.gather_lon,
80 91
             'gather_lat': self.gather_lat,
81 92
             'created_at': tc.remove_microsecond(self.created_at),
82
-            # TODO: tour guide upload banners, include travel route, matters need attention, and so on
83
-            'banners': [],
93
+            'banners': {
94
+                'attentions': self.group_attentions_url,
95
+                'schedules': self.group_schedules_url,
96
+            },
84 97
         }
85 98
 
86 99
     def users(self, admin=True, user_id=None):

+ 12 - 8
group/tourguidegroup_views.py

@@ -3,12 +3,10 @@
3 3
 from __future__ import division
4 4
 
5 5
 import json
6
-import os
7 6
 
8 7
 import shortuuid
9 8
 from curtail_uuid import CurtailUUID
10 9
 from django.conf import settings
11
-from django.core.files.storage import default_storage
12 10
 from django.core.serializers.json import DjangoJSONEncoder
13 11
 from logit import logit
14 12
 from TimeConvert import TimeConvert as tc
@@ -21,6 +19,7 @@ from utils.redis.rgroup import get_group_info, get_group_users_info, set_group_i
21 19
 from utils.redis.rkeys import (TOUR_GUIDE_GROUP_CUR_GATHER_INFO, TOUR_GUIDE_GROUP_CUR_SESSION,
22 20
                                TOUR_GUIDE_GROUP_USER_BELONG)
23 21
 from utils.redis.rtourguide import get_tour_guide_own_group, set_tour_guide_own_group
22
+from utils.storage_utils import file_save
24 23
 
25 24
 
26 25
 r = settings.REDIS_CACHE
@@ -146,6 +145,9 @@ def tg_group_update_api(request):
146 145
     ended_at = tc.utc_string_to_utc_datetime(request.POST.get('ended_at', ''))  # UTC, %Y-%m-%dT%H:%M:%SZ
147 146
     total_persons = request.POST.get('total_persons', '')
148 147
 
148
+    attentions = request.FILES.get('attentions', '')
149
+    schedules = request.FILES.get('schedules', '')
150
+
149 151
     # 群组校验
150 152
     try:
151 153
         group = GroupInfo.objects.get(group_id=group_id)
@@ -164,19 +166,21 @@ def tg_group_update_api(request):
164 166
         group.group_desc = group_desc
165 167
     # 群组头像更新
166 168
     if group_avatar:
167
-        _, extension = os.path.splitext(group_avatar.name)
168
-        group_avatar_path = 'group/{uuid}_{extension}'.format(uuid=shortuuid.uuid(), extension=extension)
169
-        if default_storage.exists(group_avatar_path):
170
-            default_storage.delete(group_avatar_path)
171
-        default_storage.save(group_avatar_path, group_avatar)
172
-        group.group_avatar = group_avatar_path
169
+        group.group_avatar = file_save(group_avatar, prefix='group', ext='jpeg')[0]
173 170
     # 起止时间更新
174 171
     if started_at:
175 172
         group.started_at = started_at
176 173
     if ended_at:
177 174
         group.ended_at = ended_at
175
+    # 旅行团总人数更新
178 176
     if total_persons:
179 177
         group.total_persons = total_persons
178
+    # 注意事项更新
179
+    if attentions:
180
+        group.attentions = file_save(attentions, prefix='tour', ext='jpeg')[0]
181
+    # 行程安排更新
182
+    if schedules:
183
+        group.schedules = file_save(schedules, prefix='tour', ext='jpeg')[0]
180 184
     group.save()
181 185
 
182 186
     # Redis 群组数据缓存更新

+ 3 - 17
group/views.py

@@ -5,10 +5,8 @@ from __future__ import division
5 5
 import os
6 6
 import random
7 7
 
8
-import shortuuid
9 8
 from curtail_uuid import CurtailUUID
10 9
 from django.conf import settings
11
-from django.core.files.storage import default_storage
12 10
 from django.db import connection, transaction
13 11
 from logit import logit
14 12
 from rest_framework import viewsets
@@ -32,6 +30,7 @@ from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_PHOTO_WATCHER_SET, GRO
32 30
 from utils.redis.rorder import get_lensman_order_record
33 31
 from utils.redis.rprice import get_lensman_price_fixed
34 32
 from utils.sql.raw import PAI2_HOME_API
33
+from utils.storage_utils import file_save
35 34
 from utils.thumbnail_utils import make_thumbnail
36 35
 from utils.time_utils import origin_expired_stamps
37 36
 from utils.url_utils import img_url, share_url
@@ -135,12 +134,7 @@ def group_update_api(request):
135 134
         group.group_desc = group_desc
136 135
     # 群组头像更新
137 136
     if group_avatar:
138
-        _, extension = os.path.splitext(group_avatar.name)
139
-        group_avatar_path = 'group/{uuid}_{extension}'.format(uuid=shortuuid.uuid(), extension=extension)
140
-        if default_storage.exists(group_avatar_path):
141
-            default_storage.delete(group_avatar_path)
142
-        default_storage.save(group_avatar_path, group_avatar)
143
-        group.group_avatar = group_avatar_path
137
+        group.group_avatar = file_save(group_avatar, prefix='group', ext='jpeg')[0]
144 138
     group.save()
145 139
 
146 140
     # Redis 群组数据缓存更新
@@ -260,18 +254,10 @@ def flyimg_upload_api(request):
260 254
         return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
261 255
 
262 256
     if photo:
263
-        photo_path = 'fly/{uuid}{extension}'.format(uuid=shortuuid.uuid(), extension=os.path.splitext(photo.name)[1] or 'jpeg')
257
+        photo_path, ext = file_save(photo, prefix='fly', ext='jpeg')
264 258
         photo_thumbnail_path = photo_path.replace('.', '_thumbnail.')
265 259
         photo_thumbnail2_path = photo_path.replace('.', '_thumbnail2.')
266 260
 
267
-        if default_storage.exists(photo_path):
268
-            default_storage.delete(photo_path)
269
-        default_storage.save(photo_path, photo)
270
-
271
-        # if default_storage.exists(photo_thumbnail_path):
272
-        #     default_storage.delete(photo_thumbnail_path)
273
-        # default_storage.save(photo_thumbnail_path, photo)
274
-
275 261
         # 群组照片缩略图生成
276 262
         # 双列: 540, 40-50K
277 263
         photo_w, photo_h, photo_thumbnail_w, photo_thumbnail_h = make_thumbnail(

+ 3 - 12
photo/views.py

@@ -5,7 +5,6 @@ import os
5 5
 import shortuuid
6 6
 from curtail_uuid import CurtailUUID
7 7
 from django.conf import settings
8
-from django.core.files.storage import default_storage
9 8
 from django.db import transaction
10 9
 from django.shortcuts import render
11 10
 from django_q.tasks import async
@@ -24,6 +23,7 @@ from utils.redis.rgroup import get_group_info, set_group_info, set_group_users_i
24 23
 from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_DELETED_SET, GROUP_USERS_PASSED_SET,
25 24
                                GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET, UUID_LIST)
26 25
 from utils.redis.ruuid import generate_uuids, update_uuids
26
+from utils.storage_utils import file_save
27 27
 from utils.thumbnail_utils import make_thumbnail
28 28
 from utils.watermark_utils import watermark_wrap
29 29
 
@@ -93,18 +93,9 @@ def upload_photo(request):
93 93
     except LensmanInfo.DoesNotExist:
94 94
         return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
95 95
 
96
-    # photo_id = curtailUUID(PhotosInfo, 'photo_id')
96
+    m_photo_path, ext = file_save(photo, prefix='photo', ext='jpeg')
97 97
 
98
-    _, extension = os.path.splitext(photo.name)
99
-    extension = extension or 'jpeg'
100
-
101
-    m_photo_path = 'photo/{uuid}{extension}'.format(uuid=shortuuid.uuid(), extension=extension)
102
-
103
-    if default_storage.exists(m_photo_path):
104
-        default_storage.delete(m_photo_path)
105
-    default_storage.save(m_photo_path, photo)
106
-
107
-    p_photo_path = 'photo/{uuid}{extension}'.format(uuid=shortuuid.uuid(), extension=extension)
98
+    p_photo_path = 'photo/{}{}'.format(shortuuid.uuid(), ext)
108 99
     watermark_wrap(
109 100
         os.path.join(settings.MEDIA_ROOT, m_photo_path).replace('\\', '/'),
110 101
         settings.WATERMARK_LOGO,

+ 15 - 0
utils/storage_utils.py

@@ -0,0 +1,15 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+import os
4
+
5
+import shortuuid
6
+from django.core.files.storage import default_storage
7
+
8
+
9
+def file_save(file_, prefix='img', ext='jpeg'):
10
+    ext = os.path.splitext(file_.name)[-1] or ext
11
+    path = '{}/{}{}'.format(prefix, shortuuid.uuid(), ext)
12
+    if default_storage.exists(path):
13
+        default_storage.delete(path)
14
+    default_storage.save(path, file_)
15
+    return path, ext

kodo - Gogs: Go Git Service

Keine Beschreibung

0010_auto_20160120_1830.py 1.3KB

    # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ ('group', '0009_photothumbupinfo'), ] operations = [ migrations.AlterField( model_name='groupinfo', name='status', field=models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status'), ), migrations.AlterField( model_name='groupphotoinfo', name='status', field=models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status'), ), migrations.AlterField( model_name='groupuserinfo', name='status', field=models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status'), ), migrations.AlterField( model_name='photocommentinfo', name='status', field=models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status'), ), migrations.AlterField( model_name='photothumbupinfo', name='status', field=models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status'), ), ]