+
401
+    # Redis 群组数据缓存更新
402
+    group_users = set_group_info(group)
403
+
404
+    # Redis 群组删除集合缓存
405
+    r.srem(GROUP_USERS_PASSED_SET % group_id, user_id)
406
+    r.sadd(GROUP_USERS_QUIT_SET % group_id, user_id)
407
+
408
+    return JsonResponse({
409
+        'status': 200,
410
+        'message': u'用户退出成功',
411
+        'data': {
412
+            'group_id': group_id,
413
+            'users': group_users,
414
+        },
415
+    })
416
+
417
+
364 418
 def group_pass_api(request):
365 419
     """
366 420
     申请通过
@@ -575,7 +629,7 @@ def comment_submit_api(request):
575 629
         group_photo.comment_num += 1
576 630
         group_photo.save()
577 631
 
578
-        # 判断群组照片发布者是否已经被管理员移除,如若移除,则不给发布者提醒
632
+        # 判断群组照片发布者是否已经被管理员移除/主动退出,如若移除/退出,则不给发布者提醒
579 633
         if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
580 634
             UserMessageInfo.objects.create(
581 635
                 from_uid=user_id,
@@ -639,7 +693,7 @@ def thumbup_submit_api(request):
639 693
     group_photo.thumbup_num += 1
640 694
     group_photo.save()
641 695
 
642
-    # 判断群组照片发布者是否已经被管理员移除,如若移除,则不给发布者提醒
696
+    # 判断群组照片发布者是否已经被管理员移除/主动退出,如若移除/退出,则不给发布者提醒
643 697
     if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
644 698
         UserMessageInfo.objects.create(
645 699
             from_uid=user_id,
@@ -736,7 +790,7 @@ def thumbup_cancel_api(request):
736 790
     group_photo.thumbup_num -= 1
737 791
     group_photo.save()
738 792
 
739
-    # 判断群组照片发布者是否已经被管理员移除,如若移除,则不给发布者提醒
793
+    # 判断群组照片发布者是否已经被管理员移除/主动退出,如若移除/退出,则不给发布者提醒
740 794
     if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
741 795
         UserMessageInfo.objects.create(
742 796
             from_uid=user_id,

+ 5 - 4
utils/error/errno_utils.py

@@ -41,10 +41,11 @@ class GroupStatusCode(BaseStatusCode):
41 41
     NO_LOCK_PERMISSION = StatusCodeField(402005, u'No Lock Permission', description=u'没有锁定权限')
42 42
     NO_UNLOCK_PERMISSION = StatusCodeField(402006, u'No Unlock Permission', description=u'没有解锁权限')
43 43
     NO_REMOVE_PERMISSION = StatusCodeField(402007, u'No Remove Permission', description=u'没有移除权限')
44
-    NO_PASS_PERMISSION = StatusCodeField(402008, u'No Pass Permission', description=u'没有通过权限')
45
-    NO_REFUSE_PERMISSION = StatusCodeField(402009, u'No Refuse Permission', description=u'没有拒绝权限')
46
-    DUPLICATE_JOIN_REQUEST = StatusCodeField(402010, u'Duplicate Join Request', description=u'重复加群申请')
47
-    JOIN_REQUEST_NOT_FOUND = StatusCodeField(402011, u'Join Request Not Found', description=u'加群申请不存在')
44
+    NO_QUIT_PERMISSION = StatusCodeField(402008, u'No Quit Permission', description=u'没有退出权限')
45
+    NO_PASS_PERMISSION = StatusCodeField(402009, u'No Pass Permission', description=u'没有通过权限')
46
+    NO_REFUSE_PERMISSION = StatusCodeField(402010, u'No Refuse Permission', description=u'没有拒绝权限')
47
+    DUPLICATE_JOIN_REQUEST = StatusCodeField(402011, u'Duplicate Join Request', description=u'重复加群申请')
48
+    JOIN_REQUEST_NOT_FOUND = StatusCodeField(402012, u'Join Request Not Found', description=u'加群申请不存在')
48 49
 
49 50
 
50 51
 class GroupUserStatusCode(BaseStatusCode):

+ 1 - 0
utils/redis/rkeys.py

@@ -12,6 +12,7 @@ GROUP_USERS_APPLYING_SET = 'group:users:applying:set:%s'  # SET,群组用户
12 12
 GROUP_USERS_PASSED_SET = 'group:users:passed:set:%s'  # SET,群组用户通过集合,group_id
13 13
 GROUP_USERS_REFUSED_SET = 'group:users:refused:set:%s'  # SET,群组用户拒绝集合,group_id
14 14
 GROUP_USERS_DELETED_SET = 'group:users:deleted:set:%s'  # SET,群组用户移除集合,group_id
15
+GROUP_USERS_QUIT_SET = 'group:users:quit:set:%s'  # SET,群组用户退出集合,group_id
15 16
 
16 17
 # 群组照片相关
17 18
 GROUP_LAST_PHOTO_PK = 'group:last:photo:pk:%s'  # STRING,群组最后一张照片PK,group_id

+ 12 - 8
utils/sql/raw.py

@@ -1,10 +1,14 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
-PAI2_HOME_API = r"select " \
4
-                r"T1.group_id, T2.group_name, T2.group_default_avatar, T2.group_avatar, T3.id, T3.photo_path, T3.photo_w, T3.photo_h, T3.photo_thumbnail_path, T3.photo_thumbnail_w, T3.photo_thumbnail_h, T3.user_id, T3.nickname, T3.avatar, T3.comment_num, T3.thumbup_num, T3.created_at " \
5
-                r"from (select * from group_groupuserinfo where user_id='{user_id}' and user_status=1) as T1 " \
6
-                r"left outer join group_groupinfo as T2 on T1.group_id = T2.group_id " \
7
-                r"left outer join group_groupphotoinfo as T3 on T1.group_id = T3.group_id and T3.id > T1.current_id " \
8
-                r"where T3.status = 1 " \
9
-                r"order by DATE(T3.created_at) desc, T3.thumbup_num desc " \
10
-                r"limit {offset}, {rows};"
3
+PAI2_HOME_API = (
4
+    r"select "
5
+    r"T1.group_id, T2.group_name, T2.group_default_avatar, T2.group_avatar, T3.id, T3.photo_path, T3.photo_w, "
6
+    r"T3.photo_h, T3.photo_thumbnail_path, T3.photo_thumbnail_w, T3.photo_thumbnail_h, T3.user_id, T3.nickname, "
7
+    r"T3.avatar, T3.comment_num, T3.thumbup_num, T3.created_at "
8
+    r"from (select * from group_groupuserinfo where user_id='{user_id}' and user_status=1) as T1 "
9
+    r"left outer join group_groupinfo as T2 on T1.group_id = T2.group_id "
10
+    r"left outer join group_groupphotoinfo as T3 on T1.group_id = T3.group_id and T3.id > T1.current_id "
11
+    r"where T3.status = 1 "
12
+    r"order by DATE(T3.created_at) desc, T3.thumbup_num desc "
13
+    r"limit {offset}, {rows};"
14
+)

kodo - Gogs: Go Git Service

Aucune description

caesar.py 457B

    # -*- coding: utf-8 -*- import random import string fromstr = '0123456789#' tostr = 'RKxyjwzcs6U' def generate_tostr(n): fromstrlist = list(string.letters + string.digits) random.shuffle(fromstrlist) return ''.join(fromstrlist)[:n] def caesar_encrypt(plaintext): return str(plaintext).translate(string.maketrans(fromstr, tostr)) def caesar_decrypt(ciphertext): return str(ciphertext).translate(string.maketrans(tostr, fromstr))