app.course_utils module¶
course_utils.py
course_views.py的依赖函数
registration_status_check: 检查学生选课状态变化的合法性 registration_status_change: 改变学生选课状态 course_to_display: 把课程信息转换为方便前端呈现的形式 draw_lots: 预选阶段结束时执行抽签 change_course_status: 改变课程的选课阶段 remaining_willingness_point(暂不启用): 计算学生剩余的意愿点数 process_time: 把datetime对象转换成人类可读的时间表示 check_course_time_conflict: 检查当前选择的课是否与已选的课上课时间冲突
- app.course_utils.cal_participate_num(course: Course) dict [源代码]¶
计算该课程对应组织所有成员的参与次数 return {Naturalperson.id:参与次数} 前端使用的时候直接读取字典的值就好了 :param course: 选择要计算的课程 :type course: Course :return: 返回统计数据 :rtype: dict
- app.course_utils.cancel_course_activity(request: HttpRequest, activity: Activity, cancel_all: bool = False)[源代码]¶
取消课程活动,是cancel_activity的简化版,在聚合页面被调用
在聚合页面中,应确保activity是课程活动,并且应检查activity.status, 如果不是WAITING或PROGRESSING,不应调用本函数
成功无返回值,失败返回错误消息 (或者也可以在聚合页面判断出来能不能取消)
- 参数:
request (HttpRequest) -- 取消单次课程活动的请求
activity (Activity) -- 待取消的活动
cancel_all (bool, optional) -- 取消该时段所有活动, defaults to False
- 返回:
取消失败的话返回错误信息
- 返回类型:
string
- app.course_utils.change_course_status(cur_status: Status, to_status: Status) None [源代码]¶
作为定时任务,在课程设定的时间改变课程的选课阶段
example: scheduler.add_job(change_course_status, "date",
id=f"course_{course_id}_{to_status}, run_date, args)
- 参数:
cur_status (Course.Status) -- 课程的当前选课阶段
to_status (Course.Status) -- 希望课程转变到的选课阶段
- 抛出:
AssertionError -- 选课已经结束 / 两个状态间不匹配
AssertionError -- 未提供当前阶段的信息
- app.course_utils.check_ac_time_course(start_time: datetime, end_time: datetime) bool [源代码]¶
时间合法性的检查:开始早于结束
- 参数:
start_time (datetime) -- 活动开始时间
end_time (datetime) -- 活动结束时间
- 返回:
是否合法
- 返回类型:
bool
- app.course_utils.check_post_and_modify(records: QuerySet, post_data: QueryDict) dict [源代码]¶
records和post_data分别为原先和更新后的list 检查post表单是否可以为这个course对应的内容, 如果可以,修改学时 - 返回wrong|succeed - 不抛出异常 在检查过程中,会使用事务和 select_for_update 来保证原子性。 :param records: 原本的学时数据 :type records: QuerySet[CourseRecord] :param post_data: 由前端上传上来的修改结果 :type post_data: QueryDict :return: 检查结果 :rtype: MESSAGECONTEXT
- app.course_utils.course_activity_base_check(request: HttpRequest) dict [源代码]¶
检查课程活动,是activity_base_check的简化版,失败时抛出AssertionError
- 参数:
request (HttpRequest) -- 修改/发起单次课程活动的请求
- 抛出:
AssertionError -- 活动时间非法/需要报名的活动必须提前至少一小时发起
- 返回:
context
- 返回类型:
dict
- app.course_utils.course_to_display(courses: QuerySet, user: NaturalPerson, detail: bool = False) List[dict] [源代码]¶
将课程信息转换为列表,方便前端呈现
- 参数:
courses (QuerySet[Course]) -- 课程集合
user (NaturalPerson) -- 当前用户
detail (bool) -- 是否显示课程的详细信息, defaults to False
- 返回:
课程信息列表,用一个字典来传递课程的全部信息
- 返回类型:
List[dict]
- app.course_utils.create_course(request, course_id=None)[源代码]¶
检查课程,合法时寻找该课程,不存在时创建 返回(course.id, created)
- app.course_utils.create_single_course_activity(request: HttpRequest) Tuple[int, bool] [源代码]¶
创建单次课程活动,是create_activity的简化版 错误提示通过AssertionError抛出
- 参数:
request (HttpRequest) -- 发起单次课程活动的请求
- 返回:
课程活动id,True(成功创建)/False(相似活动已存在)
- 返回类型:
Tuple[int, bool]
- app.course_utils.download_course_record(course: Course = None, year: int = None, semester: Semester = None) HttpResponse [源代码]¶
返回需要导出的学时信息文件 course:
提供course时为单个课程服务,只导出该课程的相关人员的学时信息 不提供时下载所有学时信息,注意,只有相关负责老师可以访问!
- 参数:
- 返回:
返回下载的文件数据
- 返回类型:
- app.course_utils.download_select_info(single_course: Course | None = None)[源代码]¶
下载选课信息 single_course:
提供single_course时为单个课程服务,只导出该课程的相关人员的选课信息 不提供时下载所有选课信息,注意,此时只有相关负责老师可以访问! 不提供手动选课人员名单。
- 返回:
返回下载的文件数据
- 返回类型:
- app.course_utils.modify_course_activity(request: HttpRequest, activity: Activity)[源代码]¶
修改单次课程活动信息,是modify_activity的简化版 错误提示通过AssertionError抛出
- 参数:
request (HttpRequest) -- 修改单次课程活动的请求
activity (Activity) -- 待修改的活动
- app.course_utils.registration_status_change(course_id: int, user: NaturalPerson, action: str) dict [源代码]¶
学生点击选课或者取消选课后,更改学生的选课状态
- 参数:
course_id (int) -- 当前课程的编号
user (NaturalPerson) -- 当前用户
action (str) -- 希望进行的操作,可能为"select"或"cancel"
- 返回:
操作是否成功执行
- 返回类型:
MESSAGECONTEXT