@@ -3,6 +3,7 @@ |
||
| 3 | 3 |
from curtail_uuid import CurtailUUID |
| 4 | 4 |
from django.contrib import admin |
| 5 | 5 |
from django.contrib.auth.hashers import make_password |
| 6 |
+from django.db import transaction |
|
| 6 | 7 |
|
| 7 | 8 |
from account.models import (LensmanIncomeExpensesInfo, LensmanInfo, LensmanLoginLogInfo, UserIncomeExpensesInfo, |
| 8 | 9 |
UserInfo, UserLoginLogInfo) |
@@ -14,10 +15,11 @@ class LensmanInfoAdmin(admin.ModelAdmin): |
||
| 14 | 15 |
search_fields = ('name', 'phone', 'location')
|
| 15 | 16 |
list_filter = ('sex', 'user_status', 'status')
|
| 16 | 17 |
|
| 18 |
+ @transaction.atomic |
|
| 17 | 19 |
def save_model(self, request, obj, form, change): |
| 18 | 20 |
if not obj.lensman_id: |
| 19 | 21 |
try: |
| 20 |
- user_id = UserInfo.objects.get(unionid=obj.unionid).user_id |
|
| 22 |
+ user_id = UserInfo.objects.select_for_update().get(unionid=obj.unionid).user_id |
|
| 21 | 23 |
except UserInfo.DoesNotExist: |
| 22 | 24 |
user_id = None |
| 23 | 25 |
obj.lensman_id = user_id or CurtailUUID.uuid(UserInfo, 'user_id') |
@@ -3,6 +3,7 @@ |
||
| 3 | 3 |
from curtail_uuid import CurtailUUID |
| 4 | 4 |
from django.contrib.auth.hashers import check_password, make_password |
| 5 | 5 |
from django.contrib.auth.models import Group, User |
| 6 |
+from django.db import transaction |
|
| 6 | 7 |
from logit import logit |
| 7 | 8 |
from rest_framework import viewsets |
| 8 | 9 |
from TimeConvert import TimeConvert as tc |
@@ -44,6 +45,7 @@ def user_is_registered_api(request): |
||
| 44 | 45 |
|
| 45 | 46 |
|
| 46 | 47 |
@logit |
| 48 |
+@transaction.atomic |
|
| 47 | 49 |
def user_signup_api(request): |
| 48 | 50 |
user_id = request.POST.get('user_id', '')
|
| 49 | 51 |
username = request.POST.get('username', '')
|
@@ -56,7 +58,7 @@ def user_signup_api(request): |
||
| 56 | 58 |
signup_ip, signup_at = ip_addr(request), tc.utc_datetime() |
| 57 | 59 |
|
| 58 | 60 |
try: |
| 59 |
- user = UserInfo.objects.get(user_id=user_id) |
|
| 61 |
+ user = UserInfo.objects.select_for_update().get(user_id=user_id) |
|
| 60 | 62 |
except UserInfo.DoesNotExist: |
| 61 | 63 |
user = None |
| 62 | 64 |
|
@@ -83,12 +85,13 @@ def user_signup_api(request): |
||
| 83 | 85 |
|
| 84 | 86 |
|
| 85 | 87 |
@logit |
| 88 |
+@transaction.atomic |
|
| 86 | 89 |
def user_login_api(request): |
| 87 | 90 |
username = request.POST.get('username', '')
|
| 88 | 91 |
password = request.POST.get('password', '')
|
| 89 | 92 |
|
| 90 | 93 |
try: |
| 91 |
- user = UserInfo.objects.get(username=username) |
|
| 94 |
+ user = UserInfo.objects.select_for_update().get(username=username) |
|
| 92 | 95 |
except UserInfo.DoesNotExist: |
| 93 | 96 |
return response(UserStatusCode.USER_NOT_FOUND) |
| 94 | 97 |
|
@@ -116,6 +119,7 @@ def user_login_api(request): |
||
| 116 | 119 |
|
| 117 | 120 |
|
| 118 | 121 |
@logit |
| 122 |
+@transaction.atomic |
|
| 119 | 123 |
def user_wx_authorize_api(request): |
| 120 | 124 |
user_id = request.POST.get('user_id', '')
|
| 121 | 125 |
|
@@ -131,7 +135,7 @@ def user_wx_authorize_api(request): |
||
| 131 | 135 |
|
| 132 | 136 |
# 判断 unionid 是否已经存在,如果已经存在,则直接返回改帐户信息 |
| 133 | 137 |
try: |
| 134 |
- user = UserInfo.objects.get(unionid=unionid) |
|
| 138 |
+ user = UserInfo.objects.select_for_update().get(unionid=unionid) |
|
| 135 | 139 |
except UserInfo.DoesNotExist: |
| 136 | 140 |
user = None |
| 137 | 141 |
|
@@ -153,7 +157,7 @@ def user_wx_authorize_api(request): |
||
| 153 | 157 |
signup_ip, signup_at = ip_addr(request), tc.utc_datetime() |
| 154 | 158 |
|
| 155 | 159 |
try: |
| 156 |
- user = UserInfo.objects.get(user_id=user_id) |
|
| 160 |
+ user = UserInfo.objects.select_for_update().get(user_id=user_id) |
|
| 157 | 161 |
except UserInfo.DoesNotExist: |
| 158 | 162 |
user = None |
| 159 | 163 |
|
@@ -216,6 +220,7 @@ def guest_status_api(request): |
||
| 216 | 220 |
|
| 217 | 221 |
|
| 218 | 222 |
@logit |
| 223 |
+@transaction.atomic |
|
| 219 | 224 |
def guest_login_api(request): |
| 220 | 225 |
""" 游客登录 """ |
| 221 | 226 |
gen = get_guest_entrance_control() |
@@ -249,12 +254,12 @@ def guest_login_api(request): |
||
| 249 | 254 |
} |
| 250 | 255 |
# 若 uuid 存在,则 get_or_create,否则 create |
| 251 | 256 |
if uuid: |
| 252 |
- user, created = UserInfo.objects.get_or_create(user_from=UserInfo.GUEST_USER, uuid=uuid, defaults=fields) |
|
| 257 |
+ user, created = UserInfo.objects.select_for_update().get_or_create(user_from=UserInfo.GUEST_USER, uuid=uuid, defaults=fields) |
|
| 253 | 258 |
if created: |
| 254 | 259 |
user.nickname = u'游客{}'.format(user.pk)
|
| 255 | 260 |
user.save() |
| 256 | 261 |
else: |
| 257 |
- user = UserInfo.objects.create(**fields) |
|
| 262 |
+ user = UserInfo.objects.select_for_update().create(**fields) |
|
| 258 | 263 |
user.nickname = u'游客{}'.format(user.pk)
|
| 259 | 264 |
user.save() |
| 260 | 265 |
|
@@ -300,7 +300,7 @@ def lensman_origin_photo_upload_api(request): |
||
| 300 | 300 |
photo = request.FILES.get('photo', '')
|
| 301 | 301 |
|
| 302 | 302 |
try: |
| 303 |
- order = OrderInfo.objects.get(order_id=order_id, pay_status=OrderInfo.PAID) |
|
| 303 |
+ order = OrderInfo.objects.select_for_update().get(order_id=order_id, pay_status=OrderInfo.PAID) |
|
| 304 | 304 |
except OrderInfo.DoesNotExist: |
| 305 | 305 |
return response(OrderStatusCode.WX_ORDER_NOT_FOUND) |
| 306 | 306 |
|
@@ -375,7 +375,7 @@ def lensman_origin_photo_upload_api(request): |
||
| 375 | 375 |
r_photo_path=r_photo_path |
| 376 | 376 |
) |
| 377 | 377 |
|
| 378 |
- porder, created = GroupPhotoOrderInfo.objects.get_or_create( |
|
| 378 |
+ porder, created = GroupPhotoOrderInfo.objects.select_for_update().get_or_create( |
|
| 379 | 379 |
group_id=order.group_id, |
| 380 | 380 |
session_id=session_id, |
| 381 | 381 |
user_id=order.from_uid, |
@@ -116,7 +116,7 @@ def order_paid_success(order): |
||
| 116 | 116 |
order.paid_at = tc.utc_datetime() |
| 117 | 117 |
order.save() |
| 118 | 118 |
|
| 119 |
- porder, created = GroupPhotoOrderInfo.objects.get_or_create( |
|
| 119 |
+ porder, created = GroupPhotoOrderInfo.objects.select_for_update().get_or_create( |
|
| 120 | 120 |
group_id=order.group_id, |
| 121 | 121 |
session_id=order.session_id, |
| 122 | 122 |
user_id=order.from_uid, |
@@ -185,7 +185,7 @@ def wx_order_query_api(request): |
||
| 185 | 185 |
transaction_id = request.POST.get('transaction_id', '')
|
| 186 | 186 |
|
| 187 | 187 |
try: |
| 188 |
- order = OrderInfo.objects.get(order_id=order_id) |
|
| 188 |
+ order = OrderInfo.objects.select_for_update().get(order_id=order_id) |
|
| 189 | 189 |
except OrderInfo.DoesNotExist: |
| 190 | 190 |
return response(OrderStatusCode.WX_ORDER_NOT_FOUND) |
| 191 | 191 |
|