19
 from utils.error.errno_utils import PhotoStatusCode
20 20
 from utils.error.response_utils import response
21 21
 
22
+from utils.redis.rkeys import GROUP_LAST_PHOTO_PK
23
+from utils.redis.rgroup import get_group_info, get_group_users_info
24
+
22 25
 from curtail_uuid import CurtailUUID
23 26
 
24 27
 from TimeConvert import TimeConvert as tc
@@ -27,7 +30,15 @@ import os
27 30
 import shortuuid
28 31
 
29 32
 
33
+r = settings.REDIS_CACHE
34
+
35
+
30 36
 def uuid_init(request):
37
+    """
38
+    生成唯一标识
39
+    :param request:
40
+    :return:
41
+    """
31 42
     num = int(request.GET.get('num', 1000))
32 43
 
33 44
     for i in xrange(num):
@@ -43,6 +54,11 @@ def uuid_init(request):
43 54
 # curl -X POST -F user=xxxxxxx -F num=100 http://api.pai.ai/uuid
44 55
 @transaction.atomic
45 56
 def uuid(request):
57
+    """
58
+    获取唯一标识
59
+    :param request:
60
+    :return:
61
+    """
46 62
     lensman_id = request.POST.get('user', '')
47 63
     num = int(request.POST.get('num', 100))
48 64
 
@@ -72,6 +88,11 @@ def uuid(request):
72 88
 #
73 89
 # curl -X POST -F user=xxxxxxx -F session=xxxxxxx -F photo_id=xxxxxxx -F photo=@xxxxxxx.jpg http://api.pai.ai/photos/upload
74 90
 def upload_photo(request):
91
+    """
92
+    上传图片
93
+    :param request:
94
+    :return:
95
+    """
75 96
     lensman_id = request.POST.get('user', '')
76 97
     session_id = request.POST.get('session', '')
77 98
     photo_id = request.POST.get('photo_id', '')
@@ -121,6 +142,12 @@ def upload_photo(request):
121 142
 
122 143
 
123 144
 def session_detail_api(request, session):
145
+    """
146
+    Session 详情
147
+    :param request:
148
+    :param session:
149
+    :return:
150
+    """
124 151
     user_id = request.POST.get('user_id', '')
125 152
 
126 153
     # 判断 user_id 是否存在,如果不存在,则直接分配帐户
@@ -142,9 +169,8 @@ def session_detail_api(request, session):
142 169
     group_id = group.group_id
143 170
 
144 171
     # 判断 group_id/user_id 的群组用户是否存在,如果不存在,则直接创建
145
-    group_photo = GroupPhotoInfo.objects.filter(group_id=group_id).last()
146 172
     group_user = GroupUserInfo.objects.get_or_create(group_id=group_id, user_id=user_id, defaults={
147
-        'current_id': group_photo and group_photo.id or -1,
173
+        'current_id': int(r.get(GROUP_LAST_PHOTO_PK % group_id) or -1),
148 174
         'nickname': user.final_nickname,
149 175
         'admin': False,
150 176
         'user_status': GroupUserInfo.PASSED,
@@ -159,9 +185,9 @@ def session_detail_api(request, session):
159 185
             'count': photos.count(),
160 186
             'photos': [p.detail for p in photos],
161 187
             'group_id': group_id,
162
-            'group': group.data,
188
+            'group': get_group_info(group_id),
163 189
             'user_id': user_id,
164
-            'users': group.users(user_id),
190
+            'users': get_group_users_info(group_id, user_id),
165 191
         }
166 192
     })
167 193
 

+ 0 - 1
utils/error/errno_utils.py

@@ -45,7 +45,6 @@ class GroupStatusCode(BaseStatusCode):
45 45
     NO_REFUSE_PERMISSION = StatusCodeField(402009, u'No Refuse Permission', description=u'没有拒绝权限')
46 46
     DUPLICATE_JOIN_REQUEST = StatusCodeField(402010, u'Duplicate Join Request', description=u'重复加群申请')
47 47
     JOIN_REQUEST_NOT_FOUND = StatusCodeField(402011, u'Join Request Not Found', description=u'加群申请不存在')
48
-    GROUP_USER_NOT_FOUND = StatusCodeField(402012, u'Group User Not Found', description=u'该用户不在群组')
49 48
 
50 49
 
51 50
 class GroupUserStatusCode(BaseStatusCode):

+ 2 - 1
utils/error/response_utils.py

@@ -6,6 +6,7 @@ from django.http import JsonResponse
6 6
 def response(status_code, data={}):
7 7
     return JsonResponse({
8 8
         'status': status_code,
9
-        'message': status_code.description,
9
+        'message': status_code.message,
10
+        'description': status_code.description,
10 11
         'data': data,
11 12
     })

+ 0 - 7
utils/redis/keys.py

@@ -1,7 +0,0 @@
1
-# -*- coding: utf-8 -*-
2
-
3
-# 用户相关
4
-PROFILE_USER_INFO = 'profile:user:info:%s'  # 用户信息,uid
5
-
6
-# 群组相关
7
-GROUP_INFO = 'group:info:%s'  # 群组信息,group_id

+ 33 - 0
utils/redis/retrieve.py

@@ -0,0 +1,33 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.conf import settings
4
+
5
+from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo
6
+
7
+from utils.redis.rkeys import GROUP_USERS_APPLYING_SET, GROUP_USERS_PASSED_SET, GROUP_USERS_REFUSED_SET, GROUP_USERS_DELETED_SET
8
+from utils.redis.rkeys import GROUP_LAST_PHOTO_PK
9
+
10
+
11
+r = settings.REDIS_CACHE
12
+
13
+
14
+def retrieve_redis_data():
15
+    # 群组/群组照片相关
16
+    groups = GroupInfo.objects.filter(status=True)
17
+    for group in groups:
18
+        group_photo = GroupPhotoInfo.objects.filter(group_id=group.group_id).last()
19
+        # 设置群组最后一张照片PK
20
+        r.set(GROUP_LAST_PHOTO_PK % group.group_id, group_photo and group_photo.pk or -1)
21
+
22
+    # 群组用户相关
23
+    group_users = GroupUserInfo.objects.filter(status=True)
24
+    for group_user in group_users:
25
+        group_id, user_id = group_user.group_id, group_user.user_id
26
+        if group_user.user_status == GroupUserInfo.PASSED:
27
+            r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)
28
+        elif group_user.user_status == GroupUserInfo.DELETED:
29
+            r.sadd(GROUP_USERS_DELETED_SET % group_id, user_id)
30
+        elif group_user.user_status == GroupUserInfo.APPLYING:
31
+            r.sadd(GROUP_USERS_APPLYING_SET % group_id, user_id)
32
+        elif group_user.user_status == GroupUserInfo.REFUSED:
33
+            r.sadd(GROUP_USERS_REFUSED_SET % group_id, user_id)

+ 68 - 0
utils/redis/rgroup.py

@@ -0,0 +1,68 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.conf import settings
4
+from django.core.serializers.json import DjangoJSONEncoder
5
+
6
+from utils.redis.rkeys import GROUP_INFO, GROUP_USERS_INFO, GROUP_LAST_PHOTO_PK
7
+
8
+import json
9
+
10
+
11
+r = settings.REDIS_CACHE
12
+
13
+
14
+# 群组信息相关
15
+
16
+
17
+def set_group_info(group):
18
+    """ 设置群组信息 """
19
+    group_data = group.data
20
+    r.set(GROUP_INFO % group.group_id, json.dumps(group_data, cls=DjangoJSONEncoder))
21
+    return group_data
22
+
23
+
24
+def set_group_info_by_id(group_id):
25
+    """ 设置群组信息 """
26
+    from group.models import GroupInfo
27
+    try:
28
+        group = GroupInfo.objects.get(group_id=group_id)
29
+    except GroupInfo.DoesNotExist:
30
+        return {}
31
+    return set_group_info(group)
32
+
33
+
34
+def get_group_info(group_id):
35
+    """ 获取群组信息 """
36
+    return json.loads(r.get(GROUP_INFO % group_id) or '{}') or set_group_info_by_id(group_id)
37
+
38
+
39
+# 群组用户信息相关
40
+
41
+
42
+def set_group_users_info(group):
43
+    """ 设置群组用户信息 """
44
+    group_users = group.users(admin=False)
45
+    r.set(GROUP_USERS_INFO % group.group_id, json.dumps({
46
+        'group_users': group_users,
47
+        'admin_id': group.admin_id,
48
+    }, cls=DjangoJSONEncoder))
49
+    return group_users
50
+
51
+
52
+def set_group_users_info_by_id(group_id):
53
+    """ 设置群组用户信息 """
54
+    from group.models import GroupInfo
55
+    try:
56
+        group = GroupInfo.objects.get(group_id=group_id)
57
+    except GroupInfo.DoesNotExist:
58
+        return {}
59
+    return set_group_users_info(group)
60
+
61
+
62
+def get_group_users_info(group_id, user_id):
63
+    """ 获取群组用户信息 """
64
+    group_users_data = json.loads(r.get(GROUP_USERS_INFO % group_id) or '{}') or set_group_users_info_by_id(group_id)
65
+    group_users, admin_id = group_users_data.get('group_users', {}), group_users_data.get('admin_id', '')
66
+    if group_users and user_id != admin_id:
67
+        [group_users.pop(k) for k in ['applying_count', 'applying']]
68
+    return group_users

+ 17 - 0
utils/redis/rkeys.py

@@ -0,0 +1,17 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# 用户相关
4
+PROFILE_INFO = 'profile:info:%s'  # STRING,用户信息,uid
5
+
6
+# 群组相关
7
+GROUP_INFO = 'group:info:%s'  # STRING,群组信息,group_id
8
+
9
+# 群组用户相关
10
+GROUP_USERS_INFO = 'group:users:info:%s'  # STRING,群组用户信息,group_id
11
+GROUP_USERS_APPLYING_SET = 'group:users:applying:set:%s'  # SET,群组用户申请集合,group_id
12
+GROUP_USERS_PASSED_SET = 'group:users:passed:set:%s'  # SET,群组用户通过集合,group_id
13
+GROUP_USERS_REFUSED_SET = 'group:users:refused:set:%s'  # SET,群组用户拒绝集合,group_id
14
+GROUP_USERS_DELETED_SET = 'group:users:deleted:set:%s'  # SET,群组用户移除集合,group_id
15
+
16
+# 群组照片相关
17
+GROUP_LAST_PHOTO_PK = 'group:last:photo:pk:%s'  # STRING,群组最后一张照片PK,group_id

kodo - Gogs: Go Git Service

Geen omschrijving

joinus.html 2.6KB

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title>拍爱 PAI.AI 加入拍爱</title> <meta name="keywords" content="摄影 图片 影像 分享 交流 社交 交友 摄影师 女性 孩子 亲子 旅行 旅游 约拍 iphone android app" /> <link href="css/layout.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="js/jquery.min.js"></script> </head> <body> <div id="header"> <div class="content"> <a href="index.html" target="_self" class="logo"></a> <div class="navigation"> <a href="contactus.html" target="_self" >联系我们</a> <a href="joinus.html" target="_self" class="current" >加入拍爱</a> <a href="aboutus.html" target="_self" >关于我们</a> <a href="index.html" target="_self" >首页</a> </div> </div> </div> <div id="container" ><div class="content joinus"> <p> 在我们这里,你可以参与到一个火热的创业项目,未来很有可能看到自己作品满大街的人都在使用...如果您喜欢摄影...除了会有各种相机把玩,还会有同好可以畅聊...最重要的,你还会发现...... 你将成为——软件工程师中最懂摄影的人 来和我们一起做一份激动人心的事业吧 </p> <p> <strong>职位名称:iOS软件工程师</strong><br> <strong>岗位职责:</strong><br> 负责iOS平台下应用的开发<br> <strong>任职要求:</strong><br> 1、至少1年的iOS平台开发经验;<br> 2、具备扎实的数据结构、算法等技术功底;<br> 3、具备良好的编程风格与团队合作意识,可承担较大的工作压力;<br> 4、正直、优秀、有上进心,经验丰富的同时没有丧失开发NB产品的热情;<br> 5、年轻;<br> 6、期待您喜欢摄影,喜欢相机;<br> </p> <p> <strong>职位名称:专利工程师</strong><br> <strong>岗位职责:</strong><br> 1、撰写高质量的专利申请文件、答复审查意见;<br> 2、专利检索咨询、专利挖掘、以及撰写专利分析报告。<br> <strong>任职要求:</strong><br> 1、具有一年以上独立撰写专利文件经验,熟悉专利申请相关知识;<br> 2、理工科,大学本科以上毕业,物理、数学、电子、通讯、互联网等技术专业背景之一;<br> 3、有专利代理人资格证优先考虑;<br> 4、期待您喜欢摄影,喜欢相机; </p> </div></div> <div id="footer"> <div class="content foot"> <a href="aboutus.html" target="_self" >关于我们</a> <span>|</span> <a href="contactus.html" target="_self" >联系我们</a> ©2016 拍爱 PAI.AI 琼ICP备16000076号 </div> </div> </body> </html>