|
# -*- coding: utf-8 -*-
from __future__ import division
from django.conf import settings
from django.core.urlresolvers import reverse
from django.db import transaction
from django.shortcuts import redirect, render
from django_we.decorators import wechat_only
from furl import furl
from account.models import UserInfo
from codes.models import CourseCodeInfo
from course.decorators import check_token
from utils.error.errno_utils import CourseCodeStatusCode, ProfileStatusCode
from utils.error.response_utils import response
@wechat_only
@check_token
@transaction.atomic
def course_code(request):
unique_identifier = request.GET.get(settings.WECHAT_UNIQUE_IDENTIFICATION, '')
user, created = UserInfo.objects.select_for_update().get_or_create(**{settings.WECHAT_UNIQUE_IDENTIFICATION: unique_identifier})
user.unionid = request.GET.get('unionid', '')
user.openid = request.GET.get('openid', '')
user.nickname = request.GET.get('nickname', '')
user.avatar = request.GET.get('headimgurl', '')
user.save()
try:
course_code = CourseCodeInfo.objects.get(user_id=user.user_id, exchanged=True, status=True)
except CourseCodeInfo.DoesNotExist:
course_code = None
if course_code:
return redirect(furl(reverse('page:course_list')).add(request.GET).add({'user_id': user.user_id}).url)
return render(request, 'page/course_code.html', {
'domain': settings.DOMAIN,
'user_info': user.data,
'params': 'user_id={}&vtoken={}'.format(user.user_id, request.GET.get('vtoken', '')),
})
@transaction.atomic
def code_exchange(request):
user_id = request.POST.get('user_id', '')
code = request.POST.get('code', '')
try:
user = UserInfo.objects.select_for_update().get(user_id=user_id)
except UserInfo.DoesNotExist:
return response(ProfileStatusCode.PROFILE_NOT_FOUND)
try:
course_code = CourseCodeInfo.objects.select_for_update().get(code=code, status=True)
except CourseCodeInfo.DoesNotExist:
return response(CourseCodeStatusCode.COURSE_CODE_NOT_FOUND)
if course_code.exchanged:
return response(CourseCodeStatusCode.COURSE_CODE_HAS_EXCHANGED)
course_code.user_id = user.user_id
course_code.exchanged = True
course_code.save()
return response(200, 'Course Code Exchanged Success', u'课程兑换码兑换成功')
|