|
# -*- coding: utf-8 -*-
import logging
from django.conf import settings
from django.db import transaction
from django_curtail_uuid import CurtailUUID
from django_logit import logit
from django_response import response
from ipaddr import client_ip
from pyqywe_miniapp import get_userid
from pywe_storage import RedisStorage
from TimeConvert import TimeConvert as tc
from account.models import UserInfo
from statistic.models import RegisterStatisticInfo
from utils.error.errno_utils import ProductBrandStatusCode
from utils.redis.connect import r
from utils.redis.rprofile import set_profile_info
WECHAT = settings.WECHAT
logger = logging.getLogger('logit')
@logit(res=True)
@transaction.atomic
def qy_login_api(request):
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
appId = request.POST.get('appId', 'QYMINIAPP')
if brand_id != settings.KODO_DEFAULT_BRAND_ID:
return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
wxcfg = WECHAT.get(appId, {})
appid = wxcfg.get('appID')
secret = wxcfg.get('appsecret')
code = request.POST.get('code', '')
userid = get_userid(appid=appid, secret=secret, code=code, storage=RedisStorage(r))
# Get or Create User
user, created = UserInfo.objects.select_for_update().get_or_create(appid=appid, userid=userid)
# Set User_id
if created:
user.user_id = CurtailUUID.uuid(UserInfo, 'user_id')
# 注册用户统计
rsi, _ = RegisterStatisticInfo.objects.select_for_update().get_or_create(
brand_id=brand_id,
ymd=int(tc.local_string(format='%Y%m%d')),
)
rsi.num += 1
rsi.save()
# Set User Key's Value
user.user_from = UserInfo.QYMINIAPP_USER
user.appid = appid
user.user_status = UserInfo.ACTIVATED
user.signup_ip = client_ip(request)
user.signup_at = tc.utc_datetime()
user.is_maintenance = userid in settings.QY_MAINTENANCE_USERID
user.save()
# Store Userinfo
set_profile_info(user)
return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.brandata(brand_id=brand_id))
|