예제 #1
0
 async def post(self, request, id):
     test = Test.objects(id=id).first()
     if not test or test.status != Test.STATUS_PUBLISHED:
         raise NotFound('test_not_found')
     question_id = request.json['question_id']
     options = request.json['options']
     question = Question.objects(test_id=id, id=question_id).first()
     if not question:
         raise NotFound('question_not_found')
     answer = Answer.objects(account_id=current_account.id,
                             test_id=test.id).first()
     if not answer:
         Answer(id=generation_objectid(),
                account_id=current_account.id,
                test_id=test.id,
                answers={
                    question_id: options
                },
                updated_time=datetime.utcnow()).save()
     else:
         answers = answer.answers
         answers[question_id] = options
         answer.update(answers=answers, updated_time=datetime.utcnow())
         answer.save()
     if question.number == test.question_count - 1:
         last = True
         score = self.calculate_score(test, answer.answers)
         answer.update(score=score, status=Answer.STATUS_FINISHED)
         # 统计分数
     else:
         last = False
     return {'ok': True, 'last': last}, 201
예제 #2
0
 async def post(self, request):
     request.json['creator_id'] = current_account.id
     start_time = request.json.get('start_time')
     if start_time:
         request.json['start_time'] = str_to_time(start_time)
     end_time = request.json.get('end_time')
     if end_time:
         request.json['end_time'] = str_to_time(end_time)
     request.json['id'] = generation_objectid()
     test = Test(**request.json).save()
     return test, 201
예제 #3
0
 async def post(self, request, id):
     test = self._get_test(id)
     question_count = Question.objects(test_id=id).count()
     request.json['test_id'] = test.id
     request.json['number'] = question_count
     request.json['id'] = generation_objectid()
     question = Question(**request.json).save()
     # update test questions count
     test.update(question_count=question_count + 1)
     test.save()
     return question, 201
예제 #4
0
 async def post(self, request):
     encrypted_data = request.json.get('username')
     iv = request.json.get('password')
     code = request.json.get('code')
     user_info = get_wxapp_userinfo(encrypted_data, iv, code)
     openid = user_info.get('openId')
     account = Account.get_by_wxapp(openid=openid)
     if account:
         raise BadRequest('wxapp_already_registered')
     params = {
         'id': generation_objectid(),
         'nickname': user_info['nickName'],
         'avatar': user_info['avatarUrl'],
         'authentications': {'wxapp': openid},
     }
     account = Account(**params)
     account.save()
     return account, 201