14
+from utils.error.response_utils import response
15
+from utils.group_photo_utils import get_current_photos
16
+from utils.redis.rgroup import get_group_info, get_group_users_info, set_group_users_info
17
+from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_DELETED_SET, GROUP_USERS_PASSED_SET,
18
+                               GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET, TOUR_GUIDE_GROUP_CUR_SESSION,
19
+                               TOUR_GUIDE_GROUP_GEO_INFO, TOUR_GUIDE_GROUP_USER_GEO_LIST)
20
+from utils.redis.rtourguide import get_tour_guide_own_group
21
+
22
+
23
+r = settings.REDIS_CACHE
24
+
25
+
26
+@logit
27
+def tgu_group_user_join_api(request):
28
+    """
29
+    导游团用户加群
30
+    :param request:
31
+    :return:
32
+    """
33
+    admin_id = request.POST.get('admin_id', '')  # 导游唯一标识,识别二维码获取
34
+    user_id = request.POST.get('user_id', '')
35
+    nickname = request.POST.get('nickname', '')
36
+
37
+    # 获取导游团唯一标识
38
+    group_id = get_tour_guide_own_group(admin_id)
39
+
40
+    # 用户校验
41
+    try:
42
+        user = UserInfo.objects.get(user_id=user_id)
43
+    except UserInfo.DoesNotExist:
44
+        return response(UserStatusCode.USER_NOT_FOUND)
45
+
46
+    # 群组校验
47
+    try:
48
+        group = GroupInfo.objects.get(group_id=group_id)
49
+    except GroupInfo.DoesNotExist:
50
+        return response(GroupStatusCode.GROUP_NOT_FOUND)
51
+
52
+    # 群组锁定校验
53
+    if group.group_lock:
54
+        return response(GroupStatusCode.GROUP_HAS_LOCKED)
55
+
56
+    # 群组用户记录创建,若记录不存在,则创建,若记录已存在,则更新
57
+    group_user, created = GroupUserInfo.objects.get_or_create(
58
+        group_id=group_id,
59
+        user_id=user_id,
60
+    )
61
+    if group_user.user_status != GroupUserInfo.PASSED:
62
+        group_user.current_id = -1 if group.group_from == GroupInfo.SESSION_GROUP else int(
63
+            r.get(GROUP_LAST_PHOTO_PK % group_id) or -1)
64
+        group_user.nickname = nickname or user.final_nickname
65
+        group_user.avatar = user.avatar
66
+        # group_user.admin = False  # Admin Field Default False, Should Not Assign
67
+        group_user.user_status = GroupUserInfo.PASSED
68
+        group_user.passed_at = tc.utc_datetime()
69
+        group_user.save()
70
+
71
+    # Redis 群组用户数据缓存
72
+    set_group_users_info(group)
73
+
74
+    # Redis 群组通过集合缓存
75
+    r.srem(GROUP_USERS_REFUSED_SET % group_id, user_id)
76
+    r.srem(GROUP_USERS_DELETED_SET % group_id, user_id)
77
+    r.srem(GROUP_USERS_QUIT_SET % group_id, user_id)
78
+    r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)
79
+
80
+    curinfo = get_current_photos(group_id, user_id, group_user.current_id)
81
+
82
+    return response(200, 'Apply Success', u'申请成功', {
83
+        'current_id': curinfo.get('current_id', ''),
84
+        'photos': curinfo.get('photos', ''),
85
+        'group_id': group_id,
86
+        'group': get_group_info(group_id),
87
+        'user_id': user_id,
88
+        'users': get_group_users_info(group_id, user_id),
89
+    })
90
+
91
+
92
+@logit
93
+def tgu_group_user_update_api(request):
94
+    """
95
+    导游团用户更新
96
+    :param request:
97
+    :return:
98
+    """
99
+    group_id = request.POST.get('group_id', '')
100
+    admin_id = request.POST.get('admin_id', '')  # 导游唯一标识
101
+    user_id = request.POST.get('user_id', '')
102
+
103
+    name = request.POST.get('name', '')
104
+    phone = request.POST.get('phone', '')
105
+    relative_person = request.POST.get('relative_person', '')
106
+    remark = request.POST.get('remark', '')
107
+
108
+    # 群组校验
109
+    try:
110
+        group = GroupInfo.objects.get(group_id=group_id)
111
+    except GroupInfo.DoesNotExist:
112
+        return response(GroupStatusCode.GROUP_NOT_FOUND)
113
+
114
+    # 权限校验
115
+    if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists():
116
+        return response(GroupStatusCode.NO_UPDATE_PERMISSION)
117
+
118
+    try:
119
+        group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, status=True)
120
+    except GroupUserInfo.DoesNotExist:
121
+        return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
122
+
123
+    # 用户信息更新
124
+    # TODO: Whether sync name and phone to UserInfo or not?
125
+    group_user.name = name
126
+    group_user.phone = phone
127
+    group_user.relative_person = relative_person
128
+    group_user.remark = remark
129
+    group_user.save()
130
+
131
+    # Redis 群组用户数据缓存
132
+    group_users = set_group_users_info(group)
133
+
134
+    return response(200, 'Update Group Success', u'群组更新成功', {
135
+        'group_id': group_id,
136
+        'group': group.data,
137
+        'users': group_users,
138
+    })
139
+
140
+
141
+@logit
142
+def tgu_group_user_locations_api(request):
143
+    """
144
+    导游团所有用户位置信息
145
+    :param request:
146
+    :return:
147
+    """
148
+    group_id = request.POST.get('group_id', '')
149
+    admin_id = request.POST.get('admin_id', '')  # 导游唯一标识
150
+
151
+    # 权限校验
152
+    if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists():
153
+        return response(GroupStatusCode.NO_LOCATION_PERMISSION)
154
+
155
+    return response(200, 'Get Tour Guide Group All User Location Success', u'获取导游团用户地理位置信息成功', {
156
+        'group_id': group_id,
157
+        'locations': r.georadius(TOUR_GUIDE_GROUP_GEO_INFO % group_id, 0, 0, '+inf', unit='m', withdist=True, withcoord=True, sort='ASC')
158
+        # 'locations': [['x', 0.33, (2.68220901489e-06, 1.26736058093e-06)]]
159
+    })
160
+
161
+
162
+@logit
163
+def tgu_group_user_location_api(request):
164
+    """
165
+    导游团单个用户位置信息
166
+    :param request:
167
+    :return:
168
+    """
169
+    group_id = request.POST.get('group_id', '')
170
+    admin_id = request.POST.get('admin_id', '')  # 导游唯一标识
171
+    user_id = request.POST.get('user_id', '')
172
+
173
+    # 权限校验
174
+    if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists():
175
+        return response(GroupStatusCode.NO_LOCATION_PERMISSION)
176
+
177
+    session_id = r.get(TOUR_GUIDE_GROUP_CUR_SESSION % group_id)
178
+    locations = r.lrange(TOUR_GUIDE_GROUP_USER_GEO_LIST % (group_id, session_id, user_id), 0, -1)
179
+
180
+    return response(200, 'Get Tour Guide Group User Location Success', u'获取导游团用户地理位置信息成功', {
181
+        'group_id': group_id,
182
+        'user_id': user_id,
183
+        'locations': [json.loads(loc) for loc in locations]
184
+    })

+ 1 - 0
pai2/settings.py

@@ -46,6 +46,7 @@ INSTALLED_APPS = (
46 46
     'django_q',
47 47
     'api',
48 48
     'account',
49
+    'geo',
49 50
     'group',
50 51
     'message',
51 52
     'operation',

+ 19 - 11
utils/error/errno_utils.py

@@ -54,26 +54,34 @@ class PhotoStatusCode(BaseStatusCode):
54 54
 
55 55
 
56 56
 class GroupStatusCode(BaseStatusCode):
57
-    """ 群组相关错误码 4020xx """
57
+    """ 群组/团相关错误码 4020xx """
58 58
     GROUP_NOT_FOUND = StatusCodeField(402001, u'Group Not Found', description=u'群组不存在')
59 59
     GROUP_HAS_LOCKED = StatusCodeField(402002, u'Group Has Locked', description=u'群组已锁定')
60 60
     NOT_GROUP_ADMIN = StatusCodeField(402003, u'Not Group Admin', description=u'非群组管理员')
61
-    NO_UPDATE_PERMISSION = StatusCodeField(402004, u'No Update Permission', description=u'没有更新权限')
62
-    NO_LOCK_PERMISSION = StatusCodeField(402005, u'No Lock Permission', description=u'没有锁定权限')
63
-    NO_UNLOCK_PERMISSION = StatusCodeField(402006, u'No Unlock Permission', description=u'没有解锁权限')
64
-    NO_REMOVE_PERMISSION = StatusCodeField(402007, u'No Remove Permission', description=u'没有移除权限')
65
-    NO_QUIT_PERMISSION = StatusCodeField(402008, u'No Quit Permission', description=u'没有退出权限')
66
-    NO_PASS_PERMISSION = StatusCodeField(402009, u'No Pass Permission', description=u'没有通过权限')
67
-    NO_REFUSE_PERMISSION = StatusCodeField(402010, u'No Refuse Permission', description=u'没有拒绝权限')
68
-    DUPLICATE_JOIN_REQUEST = StatusCodeField(402011, u'Duplicate Join Request', description=u'重复加群申请')
69
-    JOIN_REQUEST_NOT_FOUND = StatusCodeField(402012, u'Join Request Not Found', description=u'加群申请不存在')
61
+
62
+    NO_UPDATE_PERMISSION = StatusCodeField(402010, u'No Update Permission', description=u'没有更新权限')
63
+    NO_LOCK_PERMISSION = StatusCodeField(402011, u'No Lock Permission', description=u'没有锁定权限')
64
+    NO_UNLOCK_PERMISSION = StatusCodeField(402012, u'No Unlock Permission', description=u'没有解锁权限')
65
+    NO_REMOVE_PERMISSION = StatusCodeField(402013, u'No Remove Permission', description=u'没有移除权限')
66
+    NO_QUIT_PERMISSION = StatusCodeField(402014, u'No Quit Permission', description=u'没有退出权限')
67
+    NO_PASS_PERMISSION = StatusCodeField(402015, u'No Pass Permission', description=u'没有通过权限')
68
+    NO_REFUSE_PERMISSION = StatusCodeField(402016, u'No Refuse Permission', description=u'没有拒绝权限')
69
+    NO_CLOSE_PERMISSION = StatusCodeField(402017, u'No Close Permission', description=u'没有关闭权限')
70
+    NO_LOCATION_PERMISSION = StatusCodeField(402018, u'No Location Permission', description=u'没有地理位置权限')
71
+
72
+    DUPLICATE_JOIN_REQUEST = StatusCodeField(402020, u'Duplicate Join Request', description=u'重复加群申请')
73
+    JOIN_REQUEST_NOT_FOUND = StatusCodeField(402021, u'Join Request Not Found', description=u'加群申请不存在')
74
+
75
+    COULD_HAVE_ONLY_ONE_ACTIVE_GROUP = StatusCodeField(402030, u'Could Have Only One Active Group', description=u'只能创建一个活跃团')
70 76
 
71 77
 
72 78
 class GroupUserStatusCode(BaseStatusCode):
73
-    """ 群组用户相关错误码 4021xx """
79
+    """ 群组/团用户相关错误码 4021xx """
74 80
     GROUP_USER_NOT_FOUND = StatusCodeField(402101, u'Group User Not Found', description=u'群组用户不存在')
75 81
     GROUP_USER_HAS_DELETED = StatusCodeField(402102, u'Group User Has Deleted', description=u'群组用户被移除')
76 82
 
83
+    USER_HAS_NOT_JOIN_GROUP = StatusCodeField(402131, u'User Has Not Join Group', description=u'用户未加入导游团')
84
+
77 85
 
78 86
 class GroupPhotoStatusCode(BaseStatusCode):
79 87
     """ 群组照片(飞图)相关错误码 4022xx """

+ 8 - 0
utils/redis/rkeys.py

@@ -6,6 +6,14 @@ UUID_LIST = 'uuid:list'  # List, 唯一标识列表
6 6
 # 用户相关
7 7
 PROFILE_INFO = 'profile:info:%s'  # STRING,用户信息,user_id
8 8
 
9
+# 导游相关
10
+TOUR_GUIDE_GROUP_GEO_INFO = 'tour:guide:group:geo:info:%s'  # ZSET,旅游团地理位置信息,group_id
11
+TOUR_GUIDE_GROUP_CUR_SESSION = 'tour:guide:group:cur:session:%s'  # STRING,旅游团当前Session,group_id,导游设置集合时间的时候更新
12
+TOUR_GUIDE_GROUP_USER_GEO_LIST = 'tour:guide:group:user:geo:list:%s:%s:%s'  # LIST,旅游团当前用户地理位置列表,group_id、session_id、user_id
13
+
14
+TOUR_GUIDE_GROUP_USER_OWN = 'tour:guide:group:user:own:%s'  # STRING,导游当前拥有的导游团,user_id,导游创建导游团的时候更新
15
+TOUR_GUIDE_GROUP_USER_BELONG = 'tour:guide:group:user:belong:%s'  # STRING,用户当前所属导游团,user_id,用户加入导游团的时候更新
16
+
9 17
 # 群组相关
10 18
 GROUP_INFO = 'group:info:%s'  # STRING,群组信息,group_id
11 19
 

+ 21 - 0
utils/redis/rtourguide.py

@@ -0,0 +1,21 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.conf import settings
4
+
5
+from utils.redis.rkeys import TOUR_GUIDE_GROUP_USER_OWN
6
+
7
+
8
+r = settings.REDIS_CACHE
9
+
10
+
11
+# 导游相关
12
+
13
+
14
+def set_tour_guide_own_group(user_id, group_id):
15
+    """ 设置导游拥有的导游团 """
16
+    r.set(TOUR_GUIDE_GROUP_USER_OWN % user_id, group_id)
17
+
18
+
19
+def get_tour_guide_own_group(user_id):
20
+    """ 获取导游拥有的导游团 """
21
+    return r.get(TOUR_GUIDE_GROUP_USER_OWN % user_id)

Change to use django-we support WeChat OAuth2/Share relative api · 37c5365a18 - Gogs: Go Git Service

Change to use django-we support WeChat OAuth2/Share relative api

Brightcells 8 年之前
父节点
当前提交
37c5365a18
共有 10 个文件被更改,包括 17 次插入81 次删除
  1. 5 5
      api/urls.py
  2. 2 1
      pai2/settings.py
  3. 9 9
      pay/views.py
  4. 1 0
      requirements.txt
  5. 0 0
      wechat/__init__.py
  6. 0 4
      wechat/admin.py
  7. 0 0
      wechat/migrations/__init__.py
  8. 0 4
      wechat/models.py
  9. 0 4
      wechat/tests.py
  10. 0 54
      wechat/views.py

+ 5 - 5
api/urls.py

@@ -1,6 +1,7 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3 3
 from django.conf.urls import url
4
+from django_we import views as we_views
4 5
 
5 6
 from account import views as account_views
6 7
 from account import tourguide_views
@@ -15,7 +16,6 @@ from operation import views as op_views
15 16
 from pay import views as pay_views
16 17
 from photo import views as photo_views
17 18
 from server import server_views
18
-from wechat import views as wechat_views
19 19
 
20 20
 
21 21
 # 帐户相关
@@ -165,14 +165,14 @@ urlpatterns += [
165 165
 
166 166
 # 微信授权相关
167 167
 urlpatterns += [
168
-    url(r'^wx_oauth2$', wechat_views.wx_oauth2, name='wx_oauth2'),
169
-    url(r'^base_redirect$', wechat_views.base_redirect, name='base_redirect'),
170
-    url(r'^userinfo_redirect$', wechat_views.userinfo_redirect, name='userinfo_redirect'),
168
+    url(r'^wx_oauth2$', we_views.we_oauth2, name='we_oauth2'),
169
+    url(r'^base_redirect$', we_views.base_redirect, name='base_redirect'),
170
+    url(r'^userinfo_redirect$', we_views.userinfo_redirect, name='userinfo_redirect'),
171 171
 ]
172 172
 
173 173
 # 微信分享相关
174 174
 urlpatterns += [
175
-    url(r'^wx/jsapi_signature$', wechat_views.wx_jsapi_signature_api, name='wx_jsapi_signature_api'),  # jsapi_signature
175
+    url(r'^wx/jsapi_signature$', we_views.we_jsapi_signature_api, name='we_jsapi_signature_api'),  # jsapi_signature
176 176
 ]
177 177
 
178 178
 # 首页相关

+ 2 - 1
pai2/settings.py

@@ -42,8 +42,9 @@ INSTALLED_APPS = (
42 42
     'django.contrib.messages',
43 43
     'django.contrib.staticfiles',
44 44
     'rest_framework',
45
-    'django_rlog',
46 45
     'django_q',
46
+    'django_rlog',
47
+    'django_we',
47 48
     'api',
48 49
     'account',
49 50
     'box',

+ 9 - 9
pay/views.py

@@ -208,17 +208,17 @@ def wx_order_query_api(request):
208 208
     wxpay = WeChatPay(wxcfg.get('appID'), wxcfg.get('apiKey'), wxcfg.get('mchID'))
209 209
 
210 210
     # 订单查询
211
-    data = wxpay.order.query(transaction_id, order_id)
211
+    query_data = wxpay.order.query(transaction_id, order_id)
212 212
     # 签名校验
213
-    if not check_signature(data, wxcfg.get('apiKey')):
213
+    if not check_signature(query_data, wxcfg.get('apiKey')):
214 214
         return response(OrderStatusCode.SIGN_CHECK_FAIL)
215 215
 
216
-    order.notify_msg = data
217
-    order.transaction_id = data.get('transaction_id', '')
216
+    order.notify_msg = query_data
217
+    order.transaction_id = query_data.get('transaction_id', '')
218 218
     order.save()
219 219
 
220 220
     # 交易状态
221
-    trade_state = data.get('trade_state')
221
+    trade_state = query_data.get('trade_state')
222 222
     # 订单状态判断更新
223 223
     if trade_state == 'SUCCESS':  # 订单支付成功
224 224
         order_paid_success(order)
@@ -272,20 +272,20 @@ def wx_order_detail_api(request):
272 272
 @transaction.atomic
273 273
 def wx_notify_url_api(request):
274 274
     """ 支付异步通知回调地址 """
275
-    data, success = check_pay_notify(request.body, wx_configs=settings.WECHAT)
275
+    notify_data, success = check_pay_notify(request.body, wx_configs=settings.WECHAT)
276 276
     if not success:
277 277
         return HttpResponse(WXPAY_NOTIFY_FAIL)
278 278
 
279 279
     try:
280
-        order = OrderInfo.objects.select_for_update().get(order_id=data.get('out_trade_no', ''), status=True)
280
+        order = OrderInfo.objects.select_for_update().get(order_id=notify_data.get('out_trade_no', ''), status=True)
281 281
     except OrderInfo.DoesNotExist:
282 282
         return HttpResponse(WXPAY_NOTIFY_FAIL)
283 283
 
284 284
     order.notify_msg = request.body
285
-    order.transaction_id = data.get('transaction_id', '')
285
+    order.transaction_id = notify_data.get('transaction_id', '')
286 286
     order.save()
287 287
 
288
-    result_code = data.get('result_code', '')
288
+    result_code = notify_data.get('result_code', '')
289 289
     if result_code == 'SUCCESS':
290 290
         order_paid_success(order)
291 291
     else:

+ 1 - 0
requirements.txt

@@ -18,6 +18,7 @@ django-paginator2==1.0.3
18 18
 django-rlog==1.0.7
19 19
 django-shortuuidfield==0.1.3
20 20
 django-six==1.0.2
21
+django-we==1.0.1
21 22
 djangorestframework==3.6.3
22 23
 furl==1.0.0
23 24
 hiredis==0.2.0

+ 0 - 0
wechat/__init__.py


+ 0 - 4
wechat/admin.py

@@ -1,4 +0,0 @@
1
-from django.contrib import admin
2
-
3
-
4
-# Register your models here.

+ 0 - 0
wechat/migrations/__init__.py


+ 0 - 4
wechat/models.py

@@ -1,4 +0,0 @@
1
-from django.db import models
2
-
3
-
4
-# Create your models here.

+ 0 - 4
wechat/tests.py

@@ -1,4 +0,0 @@
1
-from django.test import TestCase
2
-
3
-
4
-# Create your tests here.

+ 0 - 54
wechat/views.py

@@ -1,54 +0,0 @@
1
-# -*- coding: utf-8 -*-
2
-
3
-from django.conf import settings
4
-from django.shortcuts import redirect
5
-from furl import furl
6
-from json_response import auto_response
7
-from pywe_jssdk import jsapi_signature_params
8
-from pywe_oauth import get_access_info, get_oauth_code_url, get_userinfo
9
-
10
-
11
-JSAPI = settings.WECHAT.get('JSAPI', {})
12
-
13
-
14
-def wx_oauth2(request):
15
-    scope = request.GET.get('scope', 'snsapi_userinfo')
16
-    redirect_url = request.GET.get('redirect_url', '')
17
-    default_url = request.GET.get('default_url', '')
18
-
19
-    if request.weixin:
20
-        redirect_uri = settings.WECHAT_USERINFO_REDIRECT_URI if scope == 'snsapi_userinfo' else settings.WECHAT_BASE_REDIRECT_URI
21
-        return redirect(get_oauth_code_url(JSAPI['appID'], redirect_uri, scope, redirect_url))
22
-
23
-    return redirect(default_url or redirect_url)
24
-
25
-
26
-def base_redirect(request):
27
-    code = request.GET.get('code', '')
28
-    state = request.GET.get('state', '')
29
-
30
-    access_info = get_access_info(JSAPI['appID'], JSAPI['appsecret'], code)
31
-    if 'errcode' in access_info:
32
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
33
-
34
-    return redirect(furl(state).add(access_info).url)
35
-
36
-
37
-def userinfo_redirect(request):
38
-    code = request.GET.get('code', '')
39
-    state = request.GET.get('state', '')
40
-
41
-    access_info = get_access_info(JSAPI['appID'], JSAPI['appsecret'], code)
42
-    if 'errcode' in access_info:
43
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
44
-
45
-    userinfo = get_userinfo(access_info.get('access_token', ''), access_info.get('openid', ''))
46
-    if 'openid' not in userinfo:
47
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
48
-
49
-    return redirect(furl(state).add(userinfo).url)
50
-
51
-
52
-@auto_response
53
-def wx_jsapi_signature_api(request):
54
-    return jsapi_signature_params(JSAPI['appID'], JSAPI['appsecret'], request.GET.get('url', ''))

long => lon · e04f95dc5e - Gogs: Go Git Service

long => lon

Brightcells 7 anos atrás
pai
commit
e04f95dc5e
3 arquivos alterados com 28 adições e 3 exclusões
  1. 1 1
      api/mch_views.py
  2. 25 0
      mch/migrations/0009_auto_20180129_0426.py
  3. 2 2
      mch/models.py

+ 1 - 1
api/mch_views.py

@@ -125,7 +125,7 @@ def consumer_info_api(request):
125 125
         iv=iv,
126 126
         encryptedData=encryptedData,
127 127
         lat=lat,
128
-        lon=long,
128
+        lon=lon,
129 129
         serialNo=serialNo,
130 130
         verifyResult=verifyResult,
131 131
     )

+ 25 - 0
mch/migrations/0009_auto_20180129_0426.py

@@ -0,0 +1,25 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.9 on 2018-01-28 20:26
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('mch', '0008_auto_20180129_0422'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AlterField(
16
+            model_name='consumeinfosubmitloginfo',
17
+            name='encryptedData',
18
+            field=models.CharField(blank=True, help_text='encryptedData', max_length=255, null=True, verbose_name='encryptedData'),
19
+        ),
20
+        migrations.AlterField(
21
+            model_name='consumeinfosubmitloginfo',
22
+            name='iv',
23
+            field=models.CharField(blank=True, help_text='iv', max_length=255, null=True, verbose_name='iv'),
24
+        ),
25
+    ]

+ 2 - 2
mch/models.py

@@ -195,8 +195,8 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
195 195
     user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
196 196
 
197 197
     phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户手机', db_index=True)
198
-    iv = models.CharField(_(u'iv'), max_length=11, blank=True, null=True, help_text=u'iv')
199
-    encryptedData = models.CharField(_(u'encryptedData'), max_length=11, blank=True, null=True, help_text=u'encryptedData')
198
+    iv = models.CharField(_(u'iv'), max_length=255, blank=True, null=True, help_text=u'iv')
199
+    encryptedData = models.CharField(_(u'encryptedData'), max_length=255, blank=True, null=True, help_text=u'encryptedData')
200 200
 
201 201
     lat = models.FloatField(_(u'lat'), default=1.0, help_text=u'纬度')
202 202
     lon = models.FloatField(_(u'lon'), default=1.0, help_text=u'经度')

kodo - Gogs: Go Git Service

説明なし

rprofile.py 633B

    # -*- coding: utf-8 -*- from utils.redis.connect import r from utils.redis.rkeys import PROFILE_INFO def set_profile_info(user): """ 设置用户信息 """ r.setjson(PROFILE_INFO % user.user_id, user.data) return user.data def set_profile_by_uid(user_id): """ 获取用户信息 """ from account.models import UserInfo try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return {} return set_profile_info(user) def get_profile_by_id(user_id): """ 获取用户信息 """ return r.getjson(PROFILE_INFO % user_id) or set_profile_by_uid(user_id)