@@ -13,13 +13,14 @@ urlpatterns = [  | 
            ||
| 13 | 13 | 
                url(r'^u/signup$', account_views.user_signup_api, name='user_signup_api'), # 用户注册  | 
            
| 14 | 14 | 
                url(r'^u/login$', account_views.user_login_api, name='user_login_api'), # 用户登录  | 
            
| 15 | 15 | 
                 | 
            
| 16 | 
                - url(r'^u/wx/authorize$', account_views.wx_authorize_api, name='wx_authorize_api'), # 用户登录  | 
            |
| 16 | 
                + url(r'^u/wx/authorize$', account_views.wx_authorize_api, name='wx_authorize_api'), # 微信用户授权  | 
            |
| 17 | 17 | 
                ]  | 
            
| 18 | 18 | 
                 | 
            
| 19 | 19 | 
                urlpatterns += [  | 
            
| 20 | 20 | 
                url(r'^g/create$', group_views.group_create_api, name='group_create_api'), # 群组创建  | 
            
| 21 | 21 | 
                url(r'^g/detail$', group_views.group_detail_api, name='group_detail_api'), # 群组详情  | 
            
| 22 | 22 | 
                url(r'^g/update$', group_views.group_update_api, name='group_update_api'), # 群组更新  | 
            
| 23 | 
                + url(r'^g/list$', group_views.group_list_api, name='group_list_api'), # 群组列表  | 
            |
| 23 | 24 | 
                url(r'^g/join$', group_views.group_join_api, name='group_join_api'), # 申请加群  | 
            
| 24 | 25 | 
                url(r'^g/lock$', group_views.group_lock_api, name='group_lock_api'), # 群组锁定  | 
            
| 25 | 26 | 
                url(r'^g/remove$', group_views.group_remove_api, name='group_remove_api'), # 成员移除  | 
            
                @@ -0,0 +1,19 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +from __future__ import unicode_literals  | 
            |
| 3 | 
                +  | 
            |
| 4 | 
                +from django.db import models, migrations  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +class Migration(migrations.Migration):  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                + dependencies = [  | 
            |
| 10 | 
                +        ('group', '0005_groupuserinfo_current_id'),
               | 
            |
| 11 | 
                + ]  | 
            |
| 12 | 
                +  | 
            |
| 13 | 
                + operations = [  | 
            |
| 14 | 
                + migrations.AddField(  | 
            |
| 15 | 
                + model_name='groupuserinfo',  | 
            |
| 16 | 
                + name='avatar',  | 
            |
| 17 | 
                + field=models.CharField(help_text='\u7528\u6237\u5934\u50cf', max_length=255, null=True, verbose_name='avatar', blank=True),  | 
            |
| 18 | 
                + ),  | 
            |
| 19 | 
                + ]  | 
            
                @@ -83,6 +83,7 @@ class GroupUserInfo(CreateUpdateMixin):  | 
            ||
| 83 | 83 | 
                user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识')  | 
            
| 84 | 84 | 
                current_id = models.IntegerField(_(u'current_id'), default=-1, help_text=u'当前群组照片ID')  | 
            
| 85 | 85 | 
                nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户群组昵称')  | 
            
| 86 | 
                + avatar = models.CharField(_(u'avatar'), max_length=255, blank=True, null=True, help_text=u'用户头像')  | 
            |
| 86 | 87 | 
                admin = models.BooleanField(_(u'admin'), default=False, help_text=u'群组管理员')  | 
            
| 87 | 88 | 
                user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=APPLYING)  | 
            
| 88 | 89 | 
                passed_at = models.DateTimeField(_(u'passed_at'), blank=True, null=True, help_text=_(u'通过时间'))  | 
            
                @@ -101,6 +102,7 @@ class GroupUserInfo(CreateUpdateMixin):  | 
            ||
| 101 | 102 | 
                         return {
               | 
            
| 102 | 103 | 
                'user_id': self.user_id,  | 
            
| 103 | 104 | 
                'nickname': self.nickname,  | 
            
| 105 | 
                + 'avatar': self.avatar,  | 
            |
| 104 | 106 | 
                'admin': self.admin,  | 
            
| 105 | 107 | 
                }  | 
            
| 106 | 108 | 
                 | 
            
                @@ -44,6 +44,7 @@ def group_create_api(request):  | 
            ||
| 44 | 44 | 
                group_id=group_id,  | 
            
| 45 | 45 | 
                user_id=user_id,  | 
            
| 46 | 46 | 
                nickname=user.final_nickname,  | 
            
| 47 | 
                + avatar=user.avatar,  | 
            |
| 47 | 48 | 
                admin=True,  | 
            
| 48 | 49 | 
                user_status=GroupUserInfo.PASSED,  | 
            
| 49 | 50 | 
                passed_at=tc.utc_datetime(),  | 
            
                @@ -134,6 +135,26 @@ def group_update_api(request):  | 
            ||
| 134 | 135 | 
                })  | 
            
| 135 | 136 | 
                 | 
            
| 136 | 137 | 
                 | 
            
| 138 | 
                +def group_list_api(request):  | 
            |
| 139 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 140 | 
                +  | 
            |
| 141 | 
                + group_users = GroupUserInfo.objects.filter(user_id=user_id)  | 
            |
| 142 | 
                + groups = []  | 
            |
| 143 | 
                + for group_user in group_users:  | 
            |
| 144 | 
                + try:  | 
            |
| 145 | 
                + groups.append(GroupInfo.objects.get(group_id=group_user.group_id).data)  | 
            |
| 146 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 147 | 
                + pass  | 
            |
| 148 | 
                +  | 
            |
| 149 | 
                +    return JsonResponse({
               | 
            |
| 150 | 
                + 'status': 200,  | 
            |
| 151 | 
                + 'message': u'获取群组列表成功',  | 
            |
| 152 | 
                +        'data': {
               | 
            |
| 153 | 
                + 'groups': groups,  | 
            |
| 154 | 
                + },  | 
            |
| 155 | 
                + })  | 
            |
| 156 | 
                +  | 
            |
| 157 | 
                +  | 
            |
| 137 | 158 | 
                def group_join_api(request):  | 
            
| 138 | 159 | 
                     group_id = request.POST.get('group_id', '')
               | 
            
| 139 | 160 | 
                     user_id = request.POST.get('user_id', '')
               | 
            
                @@ -173,6 +194,7 @@ def group_join_api(request):  | 
            ||
| 173 | 194 | 
                user_id=user_id,  | 
            
| 174 | 195 | 
                current_id=group_photo and group_photo.id or -1,  | 
            
| 175 | 196 | 
                nickname=nickname or user.final_nickname,  | 
            
| 197 | 
                + avatar=user.avatar,  | 
            |
| 176 | 198 | 
                admin=False,  | 
            
| 177 | 199 | 
                user_status=GroupUserInfo.PASSED,  | 
            
| 178 | 200 | 
                passed_at=tc.utc_datetime(),  | 
            
                @@ -130,20 +130,6 @@ def session_detail_api(request, session):  | 
            ||
| 130 | 130 | 
                'assign_ip': ip_addr(request),  | 
            
| 131 | 131 | 
                'assign_at': tc.utc_datetime(),  | 
            
| 132 | 132 | 
                })  | 
            
| 133 | 
                - # try:  | 
            |
| 134 | 
                - # user = UserInfo.objects.get(user_id=user_id)  | 
            |
| 135 | 
                - # except UserInfo.DoesNotExist:  | 
            |
| 136 | 
                - # user = None  | 
            |
| 137 | 
                - #  | 
            |
| 138 | 
                - # if not user:  | 
            |
| 139 | 
                - # assign_ip, assign_at = ip_addr(request), tc.utc_datetime()  | 
            |
| 140 | 
                - # user = UserInfo.objects.create(  | 
            |
| 141 | 
                - # user_id=CurtailUUID.uuid(UserInfo, 'user_id'),  | 
            |
| 142 | 
                - # user_status=UserInfo.ASSIGN,  | 
            |
| 143 | 
                - # assign_ip=assign_ip,  | 
            |
| 144 | 
                - # assign_at=assign_at,  | 
            |
| 145 | 
                - # )  | 
            |
| 146 | 
                -  | 
            |
| 147 | 133 | 
                user_id = user.user_id  | 
            
| 148 | 134 | 
                 | 
            
| 149 | 135 | 
                # 判断通过 session_id 创建的群组是否存在,如果不存在,则直接创建  | 
            
                @@ -153,19 +139,6 @@ def session_detail_api(request, session):  | 
            ||
| 153 | 139 | 
                'group_from': GroupInfo.SESSION_GROUP,  | 
            
| 154 | 140 | 
                'session_id': session,  | 
            
| 155 | 141 | 
                })  | 
            
| 156 | 
                - # try:  | 
            |
| 157 | 
                - # group = GroupInfo.objects.get(session_id=session)  | 
            |
| 158 | 
                - # except GroupInfo.DoesNotExist:  | 
            |
| 159 | 
                - # group = None  | 
            |
| 160 | 
                - #  | 
            |
| 161 | 
                - # if not group:  | 
            |
| 162 | 
                - # group = GroupInfo.objects.create(  | 
            |
| 163 | 
                - # group_id=CurtailUUID.uuid(GroupInfo, 'group_id'),  | 
            |
| 164 | 
                - # admin_id=user_id,  | 
            |
| 165 | 
                - # group_from=GroupInfo.SESSION_GROUP,  | 
            |
| 166 | 
                - # session_id=session,  | 
            |
| 167 | 
                - # )  | 
            |
| 168 | 
                -  | 
            |
| 169 | 142 | 
                group_id = group.group_id  | 
            
| 170 | 143 | 
                 | 
            
| 171 | 144 | 
                # 判断 group_id/user_id 的群组用户是否存在,如果不存在,则直接创建  | 
            
                @@ -178,40 +151,6 @@ def session_detail_api(request, session):  | 
            ||
| 178 | 151 | 
                'passed_at': tc.utc_datetime(),  | 
            
| 179 | 152 | 
                })  | 
            
| 180 | 153 | 
                 | 
            
| 181 | 
                - # try:  | 
            |
| 182 | 
                - # group = GroupInfo.objects.get(session_id=session)  | 
            |
| 183 | 
                - # group_id = group.group_id  | 
            |
| 184 | 
                - # group_photo = GroupPhotoInfo.objects.filter(group_id=group_id).last()  | 
            |
| 185 | 
                - # if not GroupUserInfo.objects.filter(  | 
            |
| 186 | 
                - # group_id=group_id,  | 
            |
| 187 | 
                - # user_id=user_id  | 
            |
| 188 | 
                - # ).exists():  | 
            |
| 189 | 
                - # GroupUserInfo.objects.create(  | 
            |
| 190 | 
                - # group_id=group_id,  | 
            |
| 191 | 
                - # user_id=user_id,  | 
            |
| 192 | 
                - # current_id=group_photo and group_photo.id or -1,  | 
            |
| 193 | 
                - # nickname=user.username,  | 
            |
| 194 | 
                - # admin=False,  | 
            |
| 195 | 
                - # user_status=GroupUserInfo.PASSED,  | 
            |
| 196 | 
                - # passed_at=tc.utc_datetime(),  | 
            |
| 197 | 
                - # )  | 
            |
| 198 | 
                - # except GroupInfo.DoesNotExist:  | 
            |
| 199 | 
                - # group_id = CurtailUUID.uuid(GroupInfo, 'group_id')  | 
            |
| 200 | 
                - # group = GroupInfo.objects.create(  | 
            |
| 201 | 
                - # group_id=group_id,  | 
            |
| 202 | 
                - # admin_id=user_id,  | 
            |
| 203 | 
                - # group_from=GroupInfo.SESSION_GROUP,  | 
            |
| 204 | 
                - # session_id=session,  | 
            |
| 205 | 
                - # )  | 
            |
| 206 | 
                - # GroupUserInfo.objects.create(  | 
            |
| 207 | 
                - # group_id=group_id,  | 
            |
| 208 | 
                - # user_id=user_id,  | 
            |
| 209 | 
                - # nickname=user.username,  | 
            |
| 210 | 
                - # admin=True,  | 
            |
| 211 | 
                - # user_status=GroupUserInfo.PASSED,  | 
            |
| 212 | 
                - # passed_at=tc.utc_datetime(),  | 
            |
| 213 | 
                - # )  | 
            |
| 214 | 
                -  | 
            |
| 215 | 154 | 
                photos = PhotosInfo.objects.filter(session_id=session)  | 
            
| 216 | 155 | 
                     return JsonResponse({
               | 
            
| 217 | 156 | 
                'status': 200,  |