def answer_question(): try: json = request.get_json() errors = [] username = json.get('user', '') text = json.get('text', '') question_id = json.get('questionId', '') if not username: errors.append({'field': 'user', 'message': 'User is required.'}) if not text: errors.append({'field': 'text', 'message': 'Text is required.'}) if not question_id: errors.append({ 'field': 'questionId', 'message': 'Question ID is required.' }) else: if not isinstance(int(question_id), int): errors.append({ 'field': 'questionId', 'message': 'Question ID must be a integer.' }) question = Question.query.get(question_id) if not question: errors.append({ 'field': 'questionId', 'message': 'Question ID is not valid.' }) if errors: return jsonify({'errors': errors}), 422 answer = Answer.create(question=question, text=text, username=username) answer.save() return jsonify({'answer': answer.to_json()}), 201 except BadRequest as bad_e: return jsonify({ 'errors': 'Something went wrong! Maybe your JSON is malformed. Please, fix it and try again.' }), 400 except ValueError as val_e: errors.append({ 'field': 'questionId', 'message': 'Question ID must be a integer.' }) return jsonify({'errors': errors}), 400
def write_answer(id): s = search() if s: return s question = Question.query.get_or_404(id) if question.answers.filter_by( author=current_user._get_current_object()).first(): flash('你已经回答了该问题', category='warning') return redirect(url_for('.question', id=question.id)) form = WriteAnswerForm() if form.validate_on_submit(): Answer.create(body=form.body.data, question=question, author=current_user._get_current_object(), anonymous=form.anonymous.data) question_answer_add.send(question) flash('添加回答成功', category='success') return redirect(url_for('.question', id=question.id)) return render_template('answer/write_answer.html', form=form, question=question)
def test_collect_answer(self): q = Question.create(title='dwwf') a = Answer.create(body='dwwdf', question=q) f = Favorite.create(title='数学') self.assertListEqual(f.answers.all(), []) self.assertTrue(f.answers.count() == 0) self.assertTrue(a.favorites.count() == 0) f.collect(a) self.assertListEqual([i.answer for i in f.answers.all()], [a]) self.assertTrue(f.answers.count() == 1) self.assertTrue(a.favorites.count() == 1) self.assertTrue(f.has_collect_answer(a)) f.uncollect(a) self.assertTrue(f.answers.count() == 0) self.assertTrue(a.favorites.count() == 0) self.assertFalse(f.has_collect_answer(a))
def seed_all(): for item in questions_list: num = random.randint(0, len(users_list) - 1) question = Question.create( text=item['text'], username=users_list[num]['email']) print(f'Seeding question `{question.text}`') question.save() max_answers = random.randint(0, 20) for i in range(max_answers): a_num = random.randint(0, len(answers_list) - 1) num = random.randint(0, len(users_list) - 1) answer = Answer.create( text=answers_list[a_num]['text'], username=users_list[num]['email'], question=question ) print( f'Seeding answer `{answer.text}` to question `{question.text}`') answer.save() print('Finished seeding.')
def test_core_database_functionality(self): # admin_create_survey print('') print('Creating an administrator user...') role = Role.get_by_name('admin') self.assertTrue(role is not None) user = User(username='******', role=role, password='******') print('Adding and commiting data to database...') db.session.add(user) db.session.commit() self.assertTrue(User.query.filter_by( username='******').first() is not None) print('Successfully added and committed data to database.') print('Administrator user successfully created.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Creating course...') c = Course(course_code='TEST') print('Adding and commiting data to database...') db.session.add(c) db.session.commit() self.assertTrue(Course.query.filter_by( course_code='TEST').first() is not None) print('Successfully added and committed data to database.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Creating a survey with the course code...') survey = Survey.create(description='blah test', times=['1', '2'], owner_id=user.id, course=c.course_code) self.assertTrue(Survey.query.filter_by(description='blah test') .first() is not None) self.assertTrue(Survey.query.filter_by(description='blah test') .first().status == 'review') print('Survey successfully created with the course code.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Creating questions for survey...') question1 = Question.create( description="a test question1", owner_id=user.id, optional=False, q_type=2) question2 = Question.create( description="a test question2", owner_id=user.id, optional=True, q_type=2) self.assertTrue(question1 is not None) self.assertTrue(question2 is not None) print('Successfully created questions.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Setting questions to survey...') survey.set_questions([question1.id, question2.id]) self.assertTrue(survey.questions.all() is not None) print('Successfully assigned questions to survey.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') # staff_review_survey print('Creating staff user...') role = Role.get_by_name('staff') self.assertTrue(role is not None) user = User(username='******', role=role, password='******') print('Adding and commiting data to database...') db.session.add(user) db.session.commit() self.assertTrue(User.query.filter_by(username='******') .first() is not None) survey = Survey.query.filter_by(description='blah test').first() self.assertTrue(survey is not None) self.assertTrue(survey.status == 'review') print('Successfully added and committed data to database.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Setting survey phase to open...') survey.status = 'open' self.assertTrue(survey.status == 'open') db.session.add(survey) db.session.commit() print('Successfully set survey phase to open and made changes to database.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') # student_answer_survey print('Creating a student user...') role = Role.get_by_name('student') self.assertTrue(role is not None) user = User(username='******', role=role, password='******') db.session.add(user) db.session.commit() print('Successfully created student user.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Creating a survey...') survey = Survey.query.filter_by(description='blah test').first() self.assertTrue(survey is not None) self.assertTrue(survey.status == 'open') print('Successfully created a survey.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Creating answers for the survey...') a = Answer.create(survey_id=survey.id, owner_id=user.id) self.assertTrue(a is not None) self.assertTrue(a.survey_id == survey.id) self.assertTrue(a.owner_id == user.id) for question in survey.questions.all(): ae = AnswerEntity.create(answer_id=a.id, question_id=question.id, answer_content='blah' ) self.assertTrue(ae is not None) self.assertTrue(ae.question_id == question.id) self.assertTrue(ae.answer_id == a.id) print('Successfully created answers for the survey.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') # admin_close_survey print('Creating an administrator user...') user = User.query.filter_by(username='******').first() self.assertTrue(user is not None) print('Administrator user successfully created.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Creating a survey...') survey = Survey.query.filter_by(description='blah test').first() self.assertTrue(survey is not None) print('Survey successfully created.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('Setting survey phase to closed...') survey.status = 'closed' db.session.add(survey) db.session.commit() self.assertTrue(survey.status == 'closed') print('Successfully set survey to closed.') print('\x1b[0;32;40m' + 'pass' + '\x1b[0m') print('')