el="diff-9937dda3027dc290afca56146cdf71d4733d0e5bR74">74
+ (EXPENSE, u'支出'),
|
|
|
75
|
+ )
|
|
|
76
|
+
|
|
|
77
|
+ lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True)
|
|
|
78
|
+ photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'照片唯一标识', db_index=True)
|
|
|
79
|
+
|
|
|
80
|
+ type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别')
|
|
|
81
|
+ amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)')
|
|
|
82
|
+ balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)')
|
|
|
83
|
+
|
|
|
84
|
+ remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注')
|
|
|
85
|
+
|
|
|
86
|
+ class Meta:
|
|
|
87
|
+ verbose_name = _(u'lensmanincomeexpensesinfo')
|
|
|
88
|
+ verbose_name_plural = _(u'lensmanincomeexpensesinfo')
|
|
|
89
|
+
|
|
|
90
|
+ def __unicode__(self):
|
|
|
91
|
+ return unicode(self.pk)
|
|
|
92
|
+
|
|
|
93
|
+
|
|
66
|
94
|
class UserInfo(CreateUpdateMixin):
|
|
67
|
95
|
APP_USER = 0
|
|
68
|
96
|
WX_USER = 1
|
|
|
97
|
+ GUEST_USER = 9
|
|
69
|
98
|
|
|
70
|
99
|
USER_FROM = (
|
|
71
|
100
|
(APP_USER, u'APP 创建用户'),
|
|
72
|
101
|
(WX_USER, u'微信授权用户'),
|
|
|
102
|
+ (GUEST_USER, u'游客用户'),
|
|
73
|
103
|
)
|
|
74
|
104
|
|
|
75
|
105
|
UNVERIFIED = 0
|
|
|
|
@@ -115,6 +145,8 @@ class UserInfo(CreateUpdateMixin):
|
|
115
|
145
|
city = models.CharField(_(u'city'), max_length=255, blank=True, null=True, help_text=u'用户城市')
|
|
116
|
146
|
location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')
|
|
117
|
147
|
|
|
|
148
|
+ balance = models.IntegerField(_(u'balance'), default=0, help_text=u'用户余额(分)')
|
|
|
149
|
+
|
|
118
|
150
|
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED)
|
|
119
|
151
|
|
|
120
|
152
|
assign_ip = models.CharField(_(u'assign_ip'), max_length=255, blank=True, null=True, help_text=_(u'分配IP'))
|
|
|
|
@@ -170,3 +202,29 @@ class UserLoginLogInfo(CreateUpdateMixin):
|
|
170
|
202
|
|
|
171
|
203
|
def __unicode__(self):
|
|
172
|
204
|
return unicode(self.pk)
|
|
|
205
|
+
|
|
|
206
|
+
|
|
|
207
|
+class UserIncomeExpensesInfo(CreateUpdateMixin):
|
|
|
208
|
+ INCOME = 0
|
|
|
209
|
+ EXPENSE = 1
|
|
|
210
|
+
|
|
|
211
|
+ TYPE = (
|
|
|
212
|
+ (INCOME, u'收入'),
|
|
|
213
|
+ (EXPENSE, u'支出'),
|
|
|
214
|
+ )
|
|
|
215
|
+
|
|
|
216
|
+ user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
|
|
|
217
|
+ photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'照片唯一标识', db_index=True)
|
|
|
218
|
+
|
|
|
219
|
+ type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别')
|
|
|
220
|
+ amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)')
|
|
|
221
|
+ balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)')
|
|
|
222
|
+
|
|
|
223
|
+ remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注')
|
|
|
224
|
+
|
|
|
225
|
+ class Meta:
|
|
|
226
|
+ verbose_name = _(u'userincomeexpensesinfo')
|
|
|
227
|
+ verbose_name_plural = _(u'userincomeexpensesinfo')
|
|
|
228
|
+
|
|
|
229
|
+ def __unicode__(self):
|
|
|
230
|
+ return unicode(self.pk)
|
|
|
|
@@ -1,6 +1,7 @@
|
|
1
|
1
|
# -*- coding: utf-8 -*-
|
|
2
|
2
|
|
|
3
|
3
|
from curtail_uuid import CurtailUUID
|
|
|
4
|
+from django.conf import settings
|
|
4
|
5
|
from django.contrib.auth.hashers import check_password, make_password
|
|
5
|
6
|
from django.contrib.auth.models import Group, User
|
|
6
|
7
|
from django.http import JsonResponse
|
|
|
|
@@ -207,6 +208,19 @@ def wx_authorize_api(request):
|
|
207
|
208
|
})
|
|
208
|
209
|
|
|
209
|
210
|
|
|
|
211
|
+def guest_login_api(request):
|
|
|
212
|
+ try:
|
|
|
213
|
+ user = UserInfo.objects.get(user_id=settings.GUEST_USER_ID)
|
|
|
214
|
+ except UserInfo.DoesNotExist:
|
|
|
215
|
+ return response(UserStatusCode.GUEST_NOT_FOUND)
|
|
|
216
|
+
|
|
|
217
|
+ return JsonResponse({
|
|
|
218
|
+ 'status': 200,
|
|
|
219
|
+ 'message': u'Guest 登录成功',
|
|
|
220
|
+ 'data': user.data,
|
|
|
221
|
+ })
|
|
|
222
|
+
|
|
|
223
|
+
|
|
210
|
224
|
class UserViewSet(viewsets.ModelViewSet):
|
|
211
|
225
|
"""
|
|
212
|
226
|
API endpoint that allows users to be viewed or edited.
|
|
|
|
@@ -18,6 +18,8 @@ urlpatterns = [
|
|
18
|
18
|
url(r'^u/login$', account_views.user_login_api, name='user_login_api'), # 用户登录
|
|
19
|
19
|
|
|
20
|
20
|
url(r'^u/wx/authorize$', account_views.wx_authorize_api, name='wx_authorize_api'), # 微信用户授权
|
|
|
21
|
+
|
|
|
22
|
+ url(r'^u/guest$', account_views.guest_login_api, name='guest_login_api'), # 游客登录
|
|
21
|
23
|
]
|
|
22
|
24
|
|
|
23
|
25
|
# 群组相关
|
|
|
|
@@ -225,6 +225,7 @@ WECHAT_GET_OAUTH2_ACCESS_TOKEN = 'https://api.weixin.qq.com/sns/oauth2/access_to
|
|
225
|
225
|
|
|
226
|
226
|
WECHAT_GET_USERINFO = 'https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s'
|
|
227
|
227
|
|
|
|
228
|
+# 微信支付设置
|
|
228
|
229
|
WXPAY_NOTIFY_SUCCESS = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'
|
|
229
|
230
|
WXPAY_NOTIFY_FAIL = '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[XML PARSE FAIL]]></return_msg></xml>'
|
|
230
|
231
|
|
|
|
|
@@ -250,6 +251,9 @@ PAI2_HOME_MAX_ROWS = 400 # 首页照片最大数量, PAI2_HOME_PER_PAGE * PAI2_
|
|
250
|
251
|
# 群组设置
|
|
251
|
252
|
GROUP_PER_PAGE = 20 # 群组每页数量
|
|
252
|
253
|
|
|
|
254
|
+# 游客设置
|
|
|
255
|
+GUEST_USER_ID = 'guest'
|
|
|
256
|
+
|
|
253
|
257
|
# 价格设置
|
|
254
|
258
|
LENSMAN_PHOTO_HAGGLE_MAX_TIMES = 3 # 摄影师照片最大砍价次数
|
|
255
|
259
|
|
|
|
|
@@ -26,6 +26,8 @@ class UserStatusCode(BaseStatusCode):
|
|
26
|
26
|
USER_PASSWORD_ERROR = StatusCodeField(400102, u'User Password Error', description=u'用户密码错误')
|
|
27
|
27
|
USERNAME_HAS_REGISTERED = StatusCodeField(400103, u'Username Has Registered', description=u'用户名已注册')
|
|
28
|
28
|
|
|
|
29
|
+ GUEST_NOT_FOUND = StatusCodeField(400111, u'Guest Not Found', description=u'游客不存在')
|
|
|
30
|
+
|
|
29
|
31
|
|
|
30
|
32
|
class PhotoStatusCode(BaseStatusCode):
|
|
31
|
33
|
""" 照片相关错误码 4010xx """
|