实训课程模块和系统设置模块(2023-04-10)
考虑到实验中心会有老师组织实训活动比如:ACM集训、蓝桥杯集训、数学建模集训等非教务系统导出的课程,需要实现实训课程模块,主要包括实训课程列表展示模块(类似于实验课和上机课展示模块)、实训课程添加模块、实训课程修改模块、实训课程删除模块。
同时,在实训课程添加模块中准备用表单来收集添加的课程信息,这个信息中包括一个上课周次,打算实现一个系统设置模块,用来设定本学期开始的第一天,在实训课程添加模块中输入上课日期之后,可以通过日期与系统设定的学期开始第一天来计算出添加课程的上课周次。
序号 | 任务 | 完成情况 |
---|---|---|
1 | 实现系统设置模块 | √ |
2 | 后端实训课程的url 设计 |
√ |
3 | 后端实训课程的view 设计 |
√ |
4 | 后端实训课程的serializer 设计 |
√ |
5 | 前端界面设计(与实验课表风格一致) | √ |
6 | 前端添加和修改模块的表单设计 | √ |
7 | 前端删除模块的设计(与课程调休模块的删除一致) | √ |
想法:
1、实现系统设置模块
models
设计
系统设置模块是用来对全局进行设置的,比如设定本学期开学的第一天之后,也就是确定了第一周的开始,在系统中选择日期之后就可以计算出选择的日期是在第几周。
数据库中储存的字段设置为key-value
,即储存系统设置中的key
和对应的value
。
class SystemSettingModel(models.Model):
key = models.CharField(max_length=100)
value = models.CharField(max_length=100)
url
设计
# 系统设置API
r'^v1/systemsetting/$'
view
设计
class SystemSettingAPIView(APIView):
serializer
设计
class SystemSettingSerializer(serializers.Serializer):
- 前端设计
系统设置页面只需要一个页面即可,设计一个表单展示信息。
2、后端实训课程的url
设计
实现实训课程模块。
- 查询模块
即将数据库中类型为实训课的课程查找返回。
- 添加模块
这边将实训课储存和实验课上机课一同储存在课程表中,也就是说,在实现添加页面的表单时,需要的字段也就有了。
上课时间、节次、教室号、课程名称、指导老师、学生专业、学生人数,这边的周次可以通过系统设定的开学时间计算出这里的上课时间是在第几周,还有是表中储存的课程名称有两个,一是课程名称、一个是章节名称,这边直接把表单中的课程名称储存到两个字段中,课程代码的值因为是实训课程,所以是没有课程代码的,这边储存为空,课程类型直接后台指定为实训课。
- 删除模块
删除直接将该课的id
通过url
请求传到后端,后端经过逻辑判断之后将数据删除。
这边url
的设计,考虑到需要查询添加和修改,而查询和添加不需要用到课程的id
,删除和修改则需要通过课程id
来确定需要操作的课程,所以这边设计两个url
,将查询和添加的功能放在一起,删除和修改放在一起。
r'^v1/experimentalcenter/training/(?P<id>\d+)/course/(?P<cid>\d+)/$'
r'^v1/experimentalcenter/training/(?P<id>\d+)/course/$'
由于实训课展示也是要先展示实验中心,然后点击进入实验中心之后再进行增删改查操作,多以这里也必须增加实训课的实验中心页面展示url
。
r'^v1/experimentalcenter/training/(?P<id>\d+)/$'
r'^v1/experimentalcenter/training/$'
3、后端实训课程的view
设计
实训课的view设计
class ExperimentalCenterTrainingCourseListAPIView(generics.ListCreateAPIView):
class ExperimentalCenterTrainingCourseRetriveAPIView(generics.RetrieveUpdateDestroyAPIView):
实训课实验中心页面view
class ExperimentalCenterTrainingListAPIView(generics.ListCreateAPIView):
class ExperimentalCenterTrainingRetrieveAPIView(generics.RetrieveAPIView):
4、后端实训课程的serializer
设计
因为实训课实验中心展示页面需要展示实验中心的实训课数量,所以这边需要设计实验中心的serializer
,直接继承最基本的实验中心serializer
即可,重写to_representation()
函数,把count
变量更改为实训课数量即可。
class ExperimentalCenterTrainingSerializer(ExperimentalCenterSerializer):
实训课课程的serializer
需要添加create、update
两个函数的重写而实现数据的添加和更新,还需要添加一个数据验证函数validate
。
class CourseDetailSerializer(CourseSerializer):
class CourseListSerializer(CourseDetailSerializer):
def create(self, validated_data):
def update(self, instance, validated_data):
def validate(self, data):
5、前端界面设计(与实验课表风格一致)
在左边的菜单导航栏中添加实训课表按钮,点击进入之后跳转到两个实验中心页面,只不过实验中心后面显示的课程数量为实验中心实训课的数量,点击查看即可进入实验中心,看到实训课表的List
,这边与实验课和上机课有点不同,列表展示的信息是课程的详细信息,同样也有添加模块和修改模块,点击添加数据跳转到添加模块的表单,点击编辑跳转到课程信息编辑修改的表单,同时也有删除模块,点击删除,确定之后会像后端发起请求删除该ID的数据。
6、前端添加和修改模块的表单设计
添加模块和修改模块的表单设计是一致的,只不过添加模块表单中没有初始数据,而修改模块需要把课程的数据填充到表单中。
根据对老师添加课程的习惯,把必要的字段筛选出来设计到表单里,主要包含以下字段:
- 活动时间、上课节次、实验室、指导老师、活动名称、学生专业、学生人数
确定这些必要字段之后,设计活动时间为一个日期选择框,节次为一个下拉选择框,学生人数为一个数字框,其他均设计为文本输入框。
7、前端删除模块的设计(与课程调休模块的删除一致)
删除模块设计一个确定操作,以防止用户误触,当点击删除时需要在弹出框中点击确定删除才会像后端请求完成删除操作。
标签:表单,课程,实训,模块,设计,添加 From: https://www.cnblogs.com/hhhhuaz/p/17326118.html