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
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
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
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