学生选课系统 - 课程搜索功能
学生选课系统 - 课程搜索功能
功能描述
该功能允许学生在选课页面输入关键字搜索课程,系统会根据关键字在已有课程中进行模糊匹配,筛选出符合条件的课程并展示出来。
代码实现
**1. 在 select_course 函数中添加搜索功能:**pythonfrom common.flask_helper import *from common.message import Message
from model.course import Coursefrom model.record import Recordfrom model.student import Studentfrom model.material import Materialfrom model.comment import Commentfrom model.teacher import Teacher
blueprint_student = Blueprint('student', name)
主页@blueprint_student.route('/student')def main_page(): return render_template('student/main_page.html')
@blueprint_student.route('/student/selection')def select_course(): message = Message()
# 获取搜索关键字 keyword = request.args.get('keyword')
# 根据关键字筛选课程 if keyword: courses = Course.query.filter(Course.name.like('%{}%'.format(keyword))).all() else: courses = Course.query_all()
if request.args.get('cid'): if not session.get('student_number'): message.set_error('选课失败') else: if Record.query_course_with_student(request.args.get('cid'), session.get('student_number')): message.set_error('已选择该课程,无需再次选择') else: Record.add(student_number=session.get('student_number'), course_id=request.args.get('cid')) message.set_ok('选课成功')
return render_template('student/course_list.html', courses=courses, message=message)
@blueprint_student.route('/student/schedule')def my_schedule(): records = Record.query_by_student_number(session.get('student_number')) courses = [] for record in records: course = Course.query_by_id(record.course_id) courses.append(course)
return render_template('student/my_course.html', courses=courses)
@blueprint_student.route('/student/course/<course_id>', methods=['POST', 'GET'])def course_detail(course_id): message = Message() course = Course.query_by_id(course_id) if not course: abort(404)
if request.method == 'POST': content = request.form.get('comment') if content: Comment.add(course_id=course_id, student_number=session.get('student_number'), content=content) message.set_ok('评论发布成功') else: message.set_error('评论不能为空')
comments = Comment.query_by_course_id(course_id) teacher = Teacher.query_by_number(course.teacher_number) record = Record.query_course_with_student(course_id, session.get('student_number'))
return render_template('student/course_detail.html', course=course, message=message, comments=comments, teacher=teacher, record=record)
**2. 在学生选课页面的 HTML 中添加搜索框:**html
**3. 在 course.py 中添加 query_all 方法:**pythonfrom model.base import BaseModelfrom common.sqlalchemy_helper import *from common.database import db_session
class Course(SQLAlchemyBaseModel, BaseModel): tablename = 'course'
id = mapped_column(Integer, primary_key=True) name = mapped_column(String) room = mapped_column(String) teacher_number = mapped_column(Integer)
@staticmethod def query_by_id(id): return db_session.query(Course).filter(Course.id == id).first()
@staticmethod def query_by_teacher_number(number): return db_session.query(Course).filter(Course.teacher_number == number).all()
@staticmethod def query_all(): return db_session.query(Course).all()
代码说明:
- 在
select_course函数中,我们首先获取搜索关键字keyword。- 如果keyword不为空,则使用Course.query.filter(Course.name.like('%{}%'.format(keyword))).all()查询数据库中所有name字段包含keyword的课程。- 如果keyword为空,则查询所有课程。- 在 HTML 代码中,我们添加了一个表单,并使用method='get'将搜索关键字发送到select_course函数。
最终效果:
学生可以在选课页面输入关键字搜索课程,系统会根据关键字筛选课程并展示出来。
注意:
- 确保
course.py中的query_all方法已经添加。- 如果数据库中没有Course表,请先创建该表。- 以上代码示例仅供参考,您可能需要根据实际情况进行修改
原文地址: https://www.cveoy.top/t/topic/n2Kf 著作权归作者所有。请勿转载和采集!