add api flyimg_upload/flyimg_list

Brightcells 9 ans auparavant
Parent
Commettre
f58bde298b
4 fichiers modifiés avec 88 ajouts et 9 suppressions
  1. 6 1
      api/urls.py
  2. 8 0
      group/models.py
  3. 72 6
      group/views.py
  4. 2 2
      photo/views.py

+ 6 - 1
api/urls.py

@@ -14,7 +14,7 @@ urlpatterns = [
14 14
     url(r'^u/login$', account_views.user_login_api, name='user_login_api'),  # 用户登录
15 15
 ]
16 16
 
17
-urlpatterns = [
17
+urlpatterns += [
18 18
     url(r'^g/create$', group_views.group_create_api, name='group_create_api'),  # 群组创建
19 19
     url(r'^g/detail$', group_views.group_detail_api, name='group_detail_api'),  # 群组详情
20 20
     url(r'^g/update$', group_views.group_update_api, name='group_update_api'),  # 群组更新
@@ -26,6 +26,11 @@ urlpatterns = [
26 26
 ]
27 27
 
28 28
 urlpatterns += [
29
+    url(r'^f/upload$', group_views.flyimg_upload_api, name='flyimg_upload_api'),  # 飞图上传
30
+    url(r'^f/list$', group_views.flyimg_upload_api, name='flyimg_list_api'),  # 飞图列表
31
+]
32
+
33
+urlpatterns += [
29 34
     url(r'^uuid_init$', photo_views.uuid_init, name='uuid_init'),  # 生成唯一标识
30 35
     url(r'^uuid$', photo_views.uuid, name='uuid'),  # 获取唯一标识
31 36
     url(r'^photos/upload$', photo_views.upload_photo, name='upload_photo'),  # 上传图片

+ 8 - 0
group/models.py

@@ -125,3 +125,11 @@ class GroupPhotoInfo(CreateUpdateMixin):
125 125
     @property
126 126
     def photo_thumbnail_url(self):
127 127
         return u'{0}/{1}'.format(settings.IMG_DOMAIN, self.photo_thumbnail_path) if self.photo_thumbnail_path else ''
128
+
129
+    @property
130
+    def photo_info(self):
131
+        return {
132
+            'photo_id': self.pk,
133
+            'photo_path': self.photo_url,
134
+            'photo_thumbnail_path': self.photo_thumbnail_url,
135
+        }

+ 72 - 6
group/views.py

@@ -1,5 +1,6 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
+from django.core.files.storage import default_storage
3 4
 from django.db import transaction
4 5
 from django.http import JsonResponse
5 6
 
@@ -14,6 +15,9 @@ from utils.ip_utils import ip_addr
14 15
 from curtail_uuid import CurtailUUID
15 16
 from TimeConvert import TimeConvert as tc
16 17
 
18
+import os
19
+import shortuuid
20
+
17 21
 
18 22
 @transaction.atomic
19 23
 def group_create_api(request):
@@ -48,7 +52,7 @@ def group_create_api(request):
48 52
         'data': {
49 53
             'group_id': group_id,
50 54
             'group': group.data,
51
-            'users': group.users(user_id)
55
+            'users': group.users(user_id),
52 56
         },
53 57
     })
54 58
 
@@ -79,7 +83,7 @@ def group_detail_api(request):
79 83
         'data': {
80 84
             'group_id': group_id,
81 85
             'group': group.data,
82
-            'users': group.users(user_id)
86
+            'users': group.users(user_id),
83 87
         },
84 88
     })
85 89
 
@@ -122,7 +126,7 @@ def group_update_api(request):
122 126
         'data': {
123 127
             'group_id': group_id,
124 128
             'group': group.data,
125
-            'users': group.users(admin_id)
129
+            'users': group.users(admin_id),
126 130
         },
127 131
     })
128 132
 
@@ -256,7 +260,7 @@ def group_remove_api(request):
256 260
         'message': u'用户移除成功',
257 261
         'data': {
258 262
             'group_id': group_id,
259
-            'users': group.users(admin_id)
263
+            'users': group.users(admin_id),
260 264
         },
261 265
     })
262 266
 
@@ -310,7 +314,7 @@ def group_pass_api(request):
310 314
         'message': u'申请通过成功',
311 315
         'data': {
312 316
             'group_id': group_id,
313
-            'users': group.users(admin_id)
317
+            'users': group.users(admin_id),
314 318
         },
315 319
     })
316 320
 
@@ -364,11 +368,73 @@ def group_refuse_api(request):
364 368
         'message': u'申请拒绝成功',
365 369
         'data': {
366 370
             'group_id': group_id,
367
-            'users': group.users(admin_id)
371
+            'users': group.users(admin_id),
368 372
         },
369 373
     })
370 374
 
371 375
 
376
+def flyimg_upload_api(request):
377
+    group_id = request.POST.get('group_id', '')
378
+    user_id = request.POST.get('user_id', '')
379
+    nickname = request.POST.get('nickname', '')
380
+
381
+    photo = request.FILES.get('photo', '')
382
+
383
+    photo_id = int(request.POST.get('photo_id', -1))
384
+
385
+    try:
386
+        user = UserInfo.objects.get(user_id=user_id)
387
+    except UserInfo.DoesNotExist:
388
+        return JsonResponse({
389
+            'status': 4011,
390
+            'message': u'用户不存在',
391
+        })
392
+
393
+    try:
394
+        group = GroupInfo.objects.get(group_id=group_id)
395
+    except GroupInfo.DoesNotExist:
396
+        return JsonResponse({
397
+            'status': 4020,
398
+            'message': u'群组不存在',
399
+        })
400
+
401
+    if photo:
402
+        _, extension = os.path.splitext(photo.name)
403
+
404
+        uuid = shortuuid.uuid()
405
+        photo_path = 'fly/{uuid}{extension}'.format(uuid=uuid, extension=extension)
406
+        photo_thumbnail_path = 'fly/{uuid}_thumbnail{extension}'.format(uuid=uuid, extension=extension)
407
+
408
+        if default_storage.exists(photo_path):
409
+            default_storage.delete(photo_path)
410
+        default_storage.save(photo_path, photo)
411
+
412
+        if default_storage.exists(photo_thumbnail_path):
413
+            default_storage.delete(photo_thumbnail_path)
414
+        default_storage.save(photo_thumbnail_path, photo)
415
+
416
+        group_photo = GroupPhotoInfo.objects.create(
417
+            group_id=group_id,
418
+            user_id=user_id,
419
+            nickname=nickname,
420
+            photo_path=photo_path,
421
+            photo_thumbnail_path=photo_thumbnail_path,
422
+        )
423
+
424
+    group_photos = GroupPhotoInfo.objects.filter(
425
+        group_id=group_id,
426
+        pk__gt=photo_id,
427
+    ).order_by(
428
+        'created_at'
429
+    )
430
+
431
+    return JsonResponse({
432
+        'status': 200,
433
+        'message': u'飞图上传成功',
434
+        'data': [photo.photo_info for photo in group_photos],
435
+    })
436
+
437
+
372 438
 class GroupInfoViewSet(viewsets.ModelViewSet):
373 439
     queryset = GroupInfo.objects.all().order_by('-created_at')
374 440
     serializer_class = GroupInfoSerializer

+ 2 - 2
photo/views.py

@@ -123,7 +123,7 @@ def session_detail_api(request, session):
123 123
         'message': u'获取照片列表成功',
124 124
         'data': {
125 125
             'count': photos.count(),
126
-            'photos': [p.detail for p in photos]
126
+            'photos': [p.detail for p in photos],
127 127
         }
128 128
     })
129 129
 
@@ -144,7 +144,7 @@ def photo_standard_api(request, photo):
144 144
         'status': 200,
145 145
         'message': u'获取照片详情成功',
146 146
         'data': {
147
-            'photo': photo.detail
147
+            'photo': photo.detail,
148 148
         }
149 149
     })
150 150