def bind_teacher(current_file_info: dict, current_book): worksheet = current_book.sheet_by_name('统计表') test_time = os.path.splitext(current_file_info['Name'])[0][22:30] # 每次遍历一个班级 for i in range(worksheet.ncols): # 寻找有效列 col = worksheet.col_values(i) if str(col[1]).startswith('1'): class_index = str(worksheet.col_values(i)[1])[0:4] grades = StudentGrade.query.filter_by(test_time=test_time, class_index=class_index).all() # TODO:query不all()直接迭代是否可以提高速度? for name in col: if str(name).isalpha(): results = re.findall(u"[\u4e00-\u9fa5]+", worksheet.col_values(0)[col.index(name)]) if int(class_index) in range(1801, 1818): subject = results[0] else: subject = results[-1] if not Teacher.query.filter_by(teacher_name=str(name)).first(): teacher = Teacher() teacher.teacher_name = str(name) teacher.subject = subject db.session.add(teacher) else: teacher = Teacher.query.filter_by(teacher_name=str(name)).first() for grade in grades: teacher.student_grades.append(grade) db.session.commit()
def test_teacher_expired_confirmation_token(self): u = Teacher(password='******') db.session.add(u) db.session.commit() token = u.generate_auth_token(1) time.sleep(2) self.assertFalse(u.verify_auth_token(token) == u)
def dashboard_all_teachers(): admin = Admin.query.filter_by( admin_full_name=current_user.admin_full_name).first() # --------------------- # Teacher Registration # --------------------- teacher_form = TeacherRegistrationForm() if teacher_form.validate_on_submit(): teacher = Teacher( teacher_full_name=teacher_form.teacher_full_name.data, teacher_email=teacher_form.teacher_email.data, teacher_phone=teacher_form.teacher_phone.data, teacher_residence=teacher_form.teacher_residence.data, teacher_course=teacher_form.teacher_course.data) teacher.set_password(teacher_form.teacher_password.data) db.session.add(teacher) db.session.commit() send_registration_details_teacher(teacher) flash('Teacher successfully registered') return redirect(url_for('admin.dashboard_all_teachers')) # --------------------- # End of teacher registration # --------------------- teachers = Teacher.query.order_by(Teacher.teacher_last_seen.desc()).all() all_teachers = len(Teacher.query.all()) return render_template('admin/all_teachers.html', title='All Teachers', teachers=teachers, admin=admin, all_teachers=all_teachers, teacher_form=teacher_form)
def teacher_del(): teacher_id = request.form.get('teacher_id', -1, type=int) if teacher_id != -1: teacher = Teacher.get_by_id(teacher_id) ret = Teacher.delete_teacher(teacher) else: ret = u'删除失败' return jsonify(ret=ret)
def teacher_del(): teacher_id = request.form.get('teacher_id', -1, type=int) if teacher_id != -1: teacher = Teacher.get_by_id(teacher_id) ret = Teacher.delete_teacher(teacher) else: ret = u'删除失败' return jsonify(ret = ret)
def test_teacher_is_school_admin(self): t = Teacher(telephone='13700000001') s = School(name='aschool', admin='13700000001') db.session.add_all([t, s]) db.session.commit() self.assertFalse(t.is_teacher_admin(s.id)) t.schools.append(s) db.session.commit() self.assertTrue(t.is_teacher_admin(s.id))
def teachers(teacher_creat): tea_number = [ int(tea_number) for tea_number in teacher_creat.col_values(0) ] tea_name = [tea_name for tea_name in teacher_creat.col_values(1)] tea_tea = [tea_tea for tea_tea in teacher_creat.col_values(2)] teacher_list = zip(tea_number, tea_name, tea_tea) for teacher in teacher_list: Teacher.create_tea(*teacher)
def test_teacher_bind_school(self): t = Teacher(telephone='13700000000') s = School(name='aschool') db.session.add_all([t, s]) db.session.commit() Tcode.generate_code(10, s.id) tcode = Tcode.query.all()[0].code t.bind_school(tcode) self.assertTrue(t.schools[0].id == s.id) self.assertTrue(Tcode.query.filter_by(code=tcode).first() is None)
def teacher_save(): try: t = Teacher() t.id = 1 t.username = '******' t.password = '******' db.session.add(t) db.session.commit() except Exception, e: print e
def addteacher(): form = AddTeacherForm() if form.validate_on_submit(): user = Teacher(username=form.username.data, email=form.email.data) user.set_password(form.password_hash.data) db.session.add(user) db.session.commit() flash('Teacher is added Successfully') return redirect(url_for('addteacher')) return render_template('addteacher.html', form=form)
def teacher(): page = request.args.get('page', 1, type=int) per_page = current_app.config['ADMIN_TEACHER_PER_PAGE'] if page == -1: page = ((Teacher.get_count() - 1) // per_page) + 1 pagination = Teacher.get_list_pageable(page, per_page) teacher_list = pagination.items return render_template('admin/teacher.html', title = u'教师管理', teacher_list = teacher_list, pagination = pagination)
def teacher(): page = request.args.get('page', 1, type=int) per_page = current_app.config['ADMIN_TEACHER_PER_PAGE'] if page == -1: page = ((Teacher.get_count() - 1) // per_page) + 1 pagination = Teacher.get_list_pageable(page, per_page) teacher_list = pagination.items return render_template('admin/teacher.html', title=u'教师管理', teacher_list=teacher_list, pagination=pagination)
def add_teacher(): form = AddTeacherForm() if form.validate_on_submit(): teacher = Teacher() teacher.name = form.name.data teacher.age = form.age.data db.session.add(teacher) db.session.commit() return redirect(url_for('.teachers')) return render_template('add_teacher.html', form=form)
def create(self, teacher): username = teacher['username'] user_service.set_request(self.request) user = user_service.create_user({ 'username': teacher['username'], 'password': constants.TEACHER_DEFAULT_PASSWORD, 'fullname': teacher['fullname'], 'roles': ['TEACHER'] }) user_service.create_school_user(self.request.school_id, user.id) teacher = Teacher() teacher.user = user return super().create(teacher)
def signup(): form = SignupForm(request.form) if request.method == 'POST' and form.validate(): if form.role.data == "student": user = Student(name=form.name.data, email=form.email.data, student_ref=form.uni_id.data) else: user = Teacher(name=form.name.data, title=form.title.data, teacher_ref=form.uni_id.data, email=form.email.data) user.set_password(form.password.data) try: db.session.add(user) db.session.commit() response = make_response(redirect(url_for('main.index'))) response.set_cookie("name", form.name.data) return response except IntegrityError: db.session.rollback() flash( 'ERROR! Unable to register {}. Please check your details are correct and resubmit' .format(form.email.data), 'error') return render_template('signup.html', form=form)
def add_teacher(): if not current_user.is_authenticated or current_user.role != 'admin': return redirect(url_for('login')) db_subject_list = Subject.query.all() subject_list = [(i.name, i.name) for i in db_subject_list] form1 = AddTeacher(prefix="form1") form1.subject.choices = subject_list if form1.validate_on_submit() or form1.submit.data: old_user = User.query.filter(User.login == form1.login.data).first() if old_user is not None: flash('Teacher already exists') return redirect(url_for('add_teacher')) user = User(login=form1.login.data, role='teacher') user.set_password(form1.password.data) teacher = Teacher(name=form1.name.data, sub_name=form1.subject.data) user.teachers = teacher db.session.add(user) db.session.add(teacher) db.session.commit() flash('Teacher is added') return redirect(url_for('add_teacher')) db_teacher_list = Teacher.query.all() teacher_list = [(i.name, i.sub_name + "\t" + i.name) for i in db_teacher_list] form2 = DeleteTeacher(prefix="form2") form2.teacher.choices = teacher_list if form2.validate_on_submit() or form2.submit.data: t = Teacher.query.filter(Teacher.name == form2.teacher.data).first() u = User.query.filter(User.id == t.teach_id).first() db.session.delete(u) db.session.commit() flash('Teacher is deleted') return redirect(url_for('add_teacher')) return render_template('add_teacher.html', form1=form1, form2=form2)
def join_faculty(): form = JoinFaculty() if request.method == 'POST' and form.validate(): check_email = Teacher.query.filter_by(email=form.email.data).first() if check_email != None: flash( 'This email is already assigned to a Teacher. Are you sure you are not already a teacher at this school?' ) return render_template('teacher_templates/join_faculty.html', form=form) # work around to make sure user loader doesn't confuse teachers and students count1 = Student.query.order_by(Student.id.desc()).all()[0].id count2 = Teacher.query.order_by(Teacher.id.desc()).all()[0].id id = max(count1, count2) + 1 new_teacher = Teacher(id=id, first_name=form.first_name.data.title(), last_name=form.last_name.data.title(), started_at_school=form.started_at_school.data, pic_url=form.pic_url.data, email=form.email.data, password_hash=generate_password_hash( form.password.data)) db.session.add(new_teacher) db.session.commit() flash( f'Thank you {new_teacher.first_name} {new_teacher.last_name}. You are now a registered teacher. Please Log in!' ) return redirect('/login') return render_template('teacher_templates/join_faculty.html', form=form)
def test_edit_exam_teacher(self): """Teacher edit their exam properly""" exam = Exam.query.first() teacher = Teacher.get_by_id(exam.author_id) # Generate a header for a teacher token = generate_user_token(teacher.username, TEACHER_PERMISSIONS) from_date = datetime.now().replace(microsecond=0) exam_body = { 'title': '', 'description': '', 'exercises': '[]', 'exam_duration': 300, 'shuffle_exercises': True, 'max_retries': 1, 'from_date': from_date, 'to_date': from_date + timedelta(days=10) } res = self.client.patch(f'/api/v1/exams/{exam.id}', headers={'Content-Type': 'application/json', 'Authorization': f'bearer {token}'}, json=exam_body) self.assertEqual(res.status_code, 200, res.get_json()) data = res.get_json() self.check_fields_list(data, ['success', 'updated']) self.assertTrue(data['success']) self.assertEqual(data['updated'], exam.id) exam = Exam.get_by_id(exam.id) for key, value in exam_body.items(): self.assertEqual(value, getattr(exam, key), f'{key}: {value}')
def setUp(self): self.app = create_app('test') self.app_context = self.app.app_context() self.app_context.push() db.create_all() t = Teacher() t.name = 'zhangliu' t.age = 35 db.session.add(t) db.session.commit() s = Student() s.name = 'wangwu' s.age = 20 s.teacher = t db.session.add(s) db.session.commit()
def setUp(self): """Set up test client and populate test database with test data """ self.app = app.test_client() db.create_all() user = User(username="******", password="******") student = Student(student_id="ST001", first_name="Hermione", last_name="Granger", email_address="*****@*****.**") teacher = Teacher(staff_id="TC001", first_name="Minerva", last_name="McGonagall", email_address="*****@*****.**") subject = Subject(subject_id="SB001", name="Transfiguration", description="Teaches the art of changing the form " "and appearance of an object or a person.") subject.major_students.append(student) teacher.subjects_taught.append(subject) db.session.add(user) db.session.add(student) db.session.add(teacher) db.session.add(subject) self.token = self.get_token()
def test_list_enrolled_students_others_exams(self): """Teacher cannot list enrolled students of another teacher's exam""" teacher1 = (Teacher.get_query().join(Exam).order_by( Teacher.id).first()) teacher2 = (Teacher.get_query().join(Exam).order_by( Teacher.id.desc()).first()) exam1 = Exam.get_query().filter(Exam.author_id == teacher1.id).first() exam2 = Exam.get_query().filter(Exam.author_id == teacher2.id).first() tests_cases = ((teacher1, exam2), (teacher2, exam1)) for teacher, exam in tests_cases: token = generate_user_token(teacher.username, TEACHER_PERMISSIONS) res = self.client.get(f'/api/v1/enrolls/{exam.id}', headers={ 'Content-Type': 'application/json', 'Authorization': f'bearer {token}' }) self.assertEqual(res.status_code, 403, res.get_json())
def teacher_edit(id): teacher = Teacher.get_by_id(id) teacher_form = TeacherForm() if request.method == 'GET': teacher_form.name.data = teacher.name teacher_form.department.data = teacher.department if request.method == 'POST' and teacher_form.validate(): ret = Teacher.update_teacher(teacher, teacher_form) if ret == 'OK': return redirect(url_for('admin.teacher')) elif ret == 'FAIL': flash(u'提交失败') else: flash(ret) return render_template('admin/teacher_form.html', title=u'修改教师', action=url_for('admin.teacher_edit', id=id), teacher_form=teacher_form)
def teacher_edit(id): teacher = Teacher.get_by_id(id) teacher_form = TeacherForm() if request.method == 'GET': teacher_form.name.data = teacher.name teacher_form.department.data = teacher.department if request.method == 'POST' and teacher_form.validate(): ret = Teacher.update_teacher(teacher, teacher_form) if ret == 'OK': return redirect(url_for('admin.teacher')) elif ret == 'FAIL': flash(u'提交失败') else: flash(ret) return render_template('admin/teacher_form.html', title = u'修改教师', action = url_for('admin.teacher_edit', id=id), teacher_form = teacher_form)
def tea_Find(): tea_name = request.form.get('tea_name', -1) if tea_name != -1: tea = Teacher.get_by_name(tea_name) if tea is None: ret = 'FAIL' else: ret = 'OK' else: ret = 'FAIL' return jsonify(ret=ret)
def test_list_enrolled_exam_teacher(self): """Teachers cannot enroll to exams""" teachers = Teacher.get_query().all() for teacher in teachers: token = generate_user_token(teacher.username, TEACHER_PERMISSIONS) res = self.client.get('/api/v1/enrolls', headers={ 'Content-Type': 'application/json', 'Authorization': f'bearer {token}' }) self.assertEqual(res.status_code, 403)
def tea_Find(): tea_name = request.form.get('tea_name', -1) if tea_name != -1: tea = Teacher.get_by_name(tea_name) if tea is None: ret = 'FAIL' else: ret = 'OK' else: ret = 'FAIL' return jsonify(ret = ret)
def register_teacher(): form = RegistrationTeacherForm() if form.validate_on_submit(): role_teacher = SystemRole.query.filter_by(name=role_teacher_name).first() user_teacher = SystemUser(login=form.login.data, password=form.password.data, system_role=role_teacher, enabled=form.enabled.data) teacher = Teacher(fio=form.fio.data, system_user=user_teacher, phone=form.phone.data) db.session.add(user_teacher) db.session.add(teacher) flash('преподаватель {} создан.'.format(form.login.data)) return redirect(url_for('.teachers_list')) return render_template('users/form_register_edit.html', form=form, class_name='преподавателя', creating=True)
def get_teacher_list(self): teachers = [] item = self.teachers.data has_t = Teacher.get_by_name(item) if not has_t: teacher = Teacher.Teacher() teacher.name = item teacher.save() teachers.append(teacher) else: teachers.append(has_t) return teachers
def setup_database(): db.create_all() u1 = Student('Heather', 'Freeman', '*****@*****.**', 'Abc123', 'student') u2 = Student('Amanda', 'Evans', '*****@*****.**', 'Cde456', 'student') u3 = Student('Jerry', 'White', '*****@*****.**', 'qwerty123', 'student') u4 = Student('Jane', 'Berry', '*****@*****.**', 'tyu1234', 'student') u5 = Student('Lori', 'Welch', '*****@*****.**', 'erg34345', 'student') u6 = Student('Dorothy', 'Medina', '*****@*****.**', 'bfdg2', 'student') u7 = Student('Lawrence', 'Foster', '*****@*****.**', 'regergs2', 'student') u8 = Student('Annie', 'Pierce', '*****@*****.**', 'bfg3', 'student') u9 = Student('Melissa', 'Taylor', '*****@*****.**', 'eret3', 'student') u10 = Student('Deborah', 'Richards', '*****@*****.**', 'opi234', 'student') t1 = Teacher('Albert', 'Morris', '*****@*****.**', 'abc123', 'teacher') t2 = Teacher('Jane', 'Ripper', '*****@*****.**', 'abc123', 'teacher') task1 = Task(1, 1, 1) task2 = Task(2, 1, 1) task3 = Task(1, 2, 1) task3.mark_id = 1 task3.completed = True m1 = Mark(7, 10, 1, 2) m2 = Mark(1, 10, 3, 3) m3 = Mark(1, 10, 5, 3) m4 = Mark(4, 10, 5, 3) m5 = Mark(5, 10, 4, 3) m6 = Mark(3, 10, 2, 4) db.session.add_all([u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, t1, t2]) db.session.add_all([task1, task2, task3]) db.session.add_all([m1, m2, m3, m4, m5, m6]) links = [ t1.add_student(u1), t1.add_student(u2), t1.add_student(u3), t1.add_student(u8), t1.add_student(u9) ] db.session.add_all(links) db.session.commit() graph1 = Graph( '{"version":2,"graph":{"showGrid":true,"showXAxis":true,"showYAxis":true,"xAxisStep":0,"yAxisStep":0,"xAxisMinorSubdivisions":0,"yAxisMinorSubdivisions":0,"xAxisArrowMode":"NONE","yAxisArrowMode":"NONE","xAxisLabel":"Re","yAxisLabel":"Im","xAxisNumbers":true,"yAxisNumbers":true,"polarMode":false,"polarNumbers":true,"degreeMode":false,"projectorMode":false,"squareAxes":true,"viewport":{"xmin":-1.6708536134523648,"ymin":-1.9601353023240395,"xmax":1.9920012573229602,"ymax":1.847026847468353}},"expressions":{"list":[{"id":"0","type":"expression","latex":"\\sqrt{x^2+y^2}-\\sqrt{x^2+\\left(y+1\\right)^2}=0","domain":{"min":0,"max":1},"hidden":false,"color":"#2d70b3","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"1","type":"expression","latex":"\\sqrt{x^2+y^2}-\\sqrt{y^2+\\left(x-1\\right)^2}=0","domain":{"min":0,"max":1},"hidden":false,"color":"#388c46","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false}]}}', '<thead><tr><th>Plot</th><th></th><th></th></tr></thead><tbody> <tr id="row0"><td><span class="MathJax_Preview" style="color: inherit; display: none;"></span><span class="MathJax" id="MathJax-Element-2-Frame" tabindex="0" style="position: relative;" data-mathml="<math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle displaystyle="true"><mrow><mo>|</mo><mi>z</mi><mo>|</mo></mrow><mo>=</mo><mrow><mo>|</mo><mi>z</mi><mo>+</mo><mi>i</mi><mo>|</mo></mrow></mstyle></math>" role="presentation"><nobr aria-hidden="true"><span class="math" id="MathJax-Span-128" style="width: 6.074em; display: inline-block;"><span style="display: inline-block; position: relative; width: 5.06em; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.691em, 1004.93em, 2.927em, -1000em); top: -2.56em; left: 0em;"><span class="mrow" id="MathJax-Span-129"><span class="mstyle" id="MathJax-Span-130"><span class="mrow" id="MathJax-Span-131"><span class="mrow" id="MathJax-Span-132"><span class="mo" id="MathJax-Span-133" style="font-family: STIXVariants;">|</span><span class="mi" id="MathJax-Span-134" style="font-family: STIXGeneral; font-style: italic;">z</span><span class="mo" id="MathJax-Span-135" style="font-family: STIXVariants;">|</span></span><span class="mo" id="MathJax-Span-136" style="font-family: STIXGeneral; padding-left: 0.375em; padding-right: 0.375em;">=</span><span class="mrow" id="MathJax-Span-137"><span class="mo" id="MathJax-Span-138" style="font-family: STIXVariants;">|</span><span class="mi" id="MathJax-Span-139" style="font-family: STIXGeneral; font-style: italic;">z</span><span class="mo" id="MathJax-Span-140" style="font-family: STIXGeneral; padding-left: 0.3em; padding-right: 0.3em;">+</span><span class="mi" id="MathJax-Span-141" style="font-family: STIXGeneral; font-style: italic;">i</span><span class="mo" id="MathJax-Span-142" style="font-family: STIXVariants;">|</span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.56em;"></span></span></span><span style="display: inline-block; overflow: hidden; vertical-align: -0.298em; border-left: 0px solid; width: 0px; height: 1.198em;"></span></span></nobr><span class="MJX_Assistive_MathML" role="presentation"><math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle displaystyle="true"><mrow><mo>|</mo><mi>z</mi><mo>|</mo></mrow><mo>=</mo><mrow><mo>|</mo><mi>z</mi><mo>+</mo><mi>i</mi><mo>|</mo></mrow></mstyle></math></span></span><script type="math/asciimath" id="MathJax-Element-2">|z|=|z+i|</script></td><td><input name="plot" id="0" checked="" type="checkbox"></td><td><input class="btn btn-block" name="del" id="del0" value="X" type="button"></td></tr><tr id="row1"><td><span class="MathJax_Preview" style="color: inherit; display: none;"></span><span class="MathJax" id="MathJax-Element-3-Frame" tabindex="0" style="position: relative;" data-mathml="<math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle displaystyle="true"><mrow><mo>|</mo><mi>z</mi><mo>|</mo></mrow><mo>=</mo><mrow><mo>|</mo><mi>z</mi><mo>-</mo><mn>1</mn><mo>|</mo></mrow></mstyle></math>" role="presentation"><nobr aria-hidden="true"><span class="math" id="MathJax-Span-201" style="width: 6.372em; display: inline-block;"><span style="display: inline-block; position: relative; width: 5.298em; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.691em, 1005.17em, 2.927em, -1000em); top: -2.56em; left: 0em;"><span class="mrow" id="MathJax-Span-202"><span class="mstyle" id="MathJax-Span-203"><span class="mrow" id="MathJax-Span-204"><span class="mrow" id="MathJax-Span-205"><span class="mo" id="MathJax-Span-206" style="font-family: STIXVariants;">|</span><span class="mi" id="MathJax-Span-207" style="font-family: STIXGeneral; font-style: italic;">z</span><span class="mo" id="MathJax-Span-208" style="font-family: STIXVariants;">|</span></span><span class="mo" id="MathJax-Span-209" style="font-family: STIXGeneral; padding-left: 0.375em; padding-right: 0.375em;">=</span><span class="mrow" id="MathJax-Span-210"><span class="mo" id="MathJax-Span-211" style="font-family: STIXVariants;">|</span><span class="mi" id="MathJax-Span-212" style="font-family: STIXGeneral; font-style: italic;">z</span><span class="mo" id="MathJax-Span-213" style="font-family: STIXGeneral; padding-left: 0.3em; padding-right: 0.3em;">−</span><span class="mn" id="MathJax-Span-214" style="font-family: STIXGeneral;">1</span><span class="mo" id="MathJax-Span-215" style="font-family: STIXVariants;">|</span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.56em;"></span></span></span><span style="display: inline-block; overflow: hidden; vertical-align: -0.298em; border-left: 0px solid; width: 0px; height: 1.198em;"></span></span></nobr><span class="MJX_Assistive_MathML" role="presentation"><math xmlns="http://www.w3.org/1998/Math/MathML"><mstyle displaystyle="true"><mrow><mo>|</mo><mi>z</mi><mo>|</mo></mrow><mo>=</mo><mrow><mo>|</mo><mi>z</mi><mo>-</mo><mn>1</mn><mo>|</mo></mrow></mstyle></math></span></span><script type="math/asciimath" id="MathJax-Element-3">|z|=|z-1|</script></td><td><input name="plot" id="1" checked="" type="checkbox"></td><td><input class="btn btn-block" name="del" id="del1" value="X" type="button"></td></tr></tbody>', 2, '2 Lines', '', 'data:image/png;base64,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' ) db.session.add(graph1) db.session.commit()
def test_teacher_invalid_confirmation_token(self): u1 = Teacher(password='******') u2 = Teacher(password='******') db.session.add(u1) db.session.add(u2) db.session.commit() token = u1.generate_auth_token() self.assertFalse(u2.verify_auth_token(token) == u2)
def add_teacher(): """ Add new teacher """ form = AddTeacherForm() if form.validate_on_submit(): teacher = Teacher(teacher_name=form.teacher_name.data) db.session.add(teacher) db.session.commit() flash(message='Teacher is successfully added.', category='success') return redirect(url_for('teacher.add_teacher')) return render_template('teacher/add_teacher.html', title='Add Teacher', form=form)
def get_monthly_report(): form = GetMonthlyReportsForm() form.teacher.choices = Teacher.get_teachers_for_choices(defaultOpt=(0, 'All')) if form.validate_on_submit(): monthly_report_list = [[ 'Teacher', 'Days as main teacher', 'Days as assistant teacher', 'Total days', 'Salary' ]] month = int(form.month.data) year = int(form.year.data) pay_per_day = int(form.pay_per_day.data) if form.teacher.data != 0: teachers = Teacher.query.filter_by(id=form.teacher.data) else: teachers = Teacher.query.all() num_days_in_month = calendar.monthrange(year, month)[1] start_date = datetime(year, month, 1).date() end_date = datetime(year, month, num_days_in_month).date() for teacher in teachers: report_row = [] report_row.append(teacher.teacher_name) days_as_main = Report.query.filter( and_(Report.teaching_date >= start_date, Report.teaching_date <= end_date, Report.main_teacher_id == teacher.id)).count() days_as_assistant = Report.query.filter( and_(Report.teaching_date >= start_date, Report.teaching_date <= end_date, Report.assistant_teacher_id == teacher.id)).count() total_teaching_days = days_as_main + days_as_assistant salary = pay_per_day * total_teaching_days report_row.append(days_as_main) report_row.append(days_as_assistant) report_row.append(total_teaching_days) report_row.append(salary) monthly_report_list.append(report_row) return excel.make_response_from_array( monthly_report_list, file_type='csv', file_name=f'{month}-{year} monthly report') return render_template('report/get_monthly_report.html', title='Get Monthly Report', form=form)
def get_teacher_list(self): import re items = re.split(ur'[\、\,\,\s\;\;]+', self.teachers.data) teachers = [] for item in items: has_t = Teacher.get_by_name(item) if not has_t: teacher = Teacher.Teacher() teacher.name = item teacher.save() teachers.append(teacher) else: teachers.append(has_t) return teachers
def teacher_add(): teacher_form = TeacherForm() if request.method == 'POST' and teacher_form.validate(): ret = Teacher.create_teacher(teacher_form) if ret == 'OK': return redirect(url_for('admin.teacher')) elif ret == 'FAIL': flash(u'提交失败') else: flash(ret) return render_template('admin/teacher_form.html', title=u'添加教师', action=url_for('admin.teacher_add'), teacher_form=teacher_form)
def teacher_add(): teacher_form = TeacherForm() if request.method == 'POST' and teacher_form.validate(): ret = Teacher.create_teacher(teacher_form) if ret == 'OK': return redirect(url_for('admin.teacher')) elif ret == 'FAIL': flash(u'提交失败') else: flash(ret) return render_template('admin/teacher_form.html', title = u'添加教师', action = url_for('admin.teacher_add'), teacher_form = teacher_form)
def test_teacher_is_employ_and_dissmiss(self): t = Teacher(telephone='13700000000') s = School(name='aschool') t.schools.append(s) db.session.add_all([t, s]) db.session.commit() self.assertTrue(t.is_employ(s.id)) t.dismiss_school(s.id) self.assertFalse(t.is_employ(s.id))
def reset_password_teacher(token): if current_user.is_authenticated: return redirect(url_for('teacher.dashboard_account')) teacher = Teacher.verify_reset_password_token(token) if not teacher: return redirect(url_for('teacher.dashboard_account')) form = ResetPasswordForm() if form.validate_on_submit(): teacher.set_password(form.password.data) db.session.commit() flash('Your password has been reset.') return redirect(url_for('auth.login_teacher')) return render_template('auth/password-reset/reset_password_teacher.html', title='Reset Password for Teacher', form=form)
def analyze(request, teacher_id): teacher = Teacher.objects.filter(id=teacher_id) str_request = ('http://api.donorschoose.org/common/json-teacher.html?teacher=%s&APIKey=DONORSCHOOSE' % teacher_id) r = requests.get(str_request) data_dict = {} if r.status_code == 200: json_response = json.loads(str(r.text)) if not teacher: teacher = Teacher(id=teacher_id) teacher.description = json_response['description'] teacher.photo_url = json_response['photoURL'] teacher.poverty = json_response['povertyLevel'] teacher.profile_url = json_response['profileURL'] teacher.save() return render( request, 'analyze.html', {'teacher': teacher})
def get_teacher_list(self): # import re # items = re.split(ur'[\、\,\,\s\;\;]+', self.teachers.data) # teachers = [] # for item in items: # has_t = Teacher.get_by_name(item) # if has_t is not None: # teachers.append(has_t) # return teachers teachers = [] # n = 0 # print 1112222222222 # h = Teacher.get_all() # for a in h: # print h[n].name # n = n + 1 for item in self.teachers.data: if item == '': continue has_t = Teacher.get_by_name(item) if has_t is not None: teachers.append(has_t) return teachers
def get_teacher_key(self, teacher): """ Get (or create) the teacher key based on the teacher name :param teacher: The teacher name :type teacher: app.robot.value_objects.Teacher :return: The teacher key :rtype: google.appengine.ext.ndb.Key """ logging.debug("Searching teacher '%s'", teacher.name) key = self.generate_teacher_key(teacher) teacher_model = lru_cache.get(key) if teacher_model: logging.debug("Found teacher in LRU cache :D") raise ndb.Return(ndb.Key(Teacher, key)) logging.debug("Searching (or even registering) teacher '%s' in NDB", teacher.name.decode("ISO-8859-1")) teacher_model = yield Teacher.get_or_insert_async( key, name=teacher.name.decode("ISO-8859-1"), context_options=context_options ) """ type: app.models.Teacher """ lru_cache[key] = teacher_model raise ndb.Return(teacher_model.key)
def teachers_json(): query = request.args.get('query', None) teachers = Teacher.get_all(query) return jsonify(teachers = [t.to_json() for t in teachers])