Django实战项目-学习任务系统-任务管理

接着上期代码框架,开发第3个功能,任务管理,再增加一个学习任务表,用来记录发布的学习任务的标题和内容,预计完成天数,奖励积分和任务状态等信息。

第一步:编写第三个功能-任务管理

1,编辑模型文件:

./mysite/study_system/models.py:

class StudyTask(models.Model):task_id = models.AutoField(primary_key=True, verbose_name='任务ID')task_type = models.IntegerField(verbose_name='任务类型')task_title = models.CharField(max_length=100, verbose_name='任务标题')task_description = models.TextField(verbose_name='任务描述')reward_points = models.IntegerField(verbose_name='奖励积分')deadline_days = models.IntegerField(verbose_name='预计完成天数')actual_days = models.IntegerField(verbose_name='实际完成天数')task_status = models.IntegerField(verbose_name='任务状态')created_time = models.DateTimeField(verbose_name='创建时间')update_time = models.DateTimeField(verbose_name='更新时间')created_by = models.ForeignKey(StudyUser, on_delete=models.CASCADE, verbose_name='创建者ID')class Meta:verbose_name = '学习任务表'verbose_name_plural = '学习任务表'# 用于模型的数据库表的名称db_table = "study_tasks"def __str__(self):return self.task_title

2,编辑urls配置文件:
./mysite/study_system/urls.py

# 任务管理url
path('task/getUndoTaskList/', views.getUndoTaskList, name='getUndoTaskList'),
path('task/toNewTask/', views.toNewTask, name='toNewTask'),
path('task/addNewTask/', views.addNewTask, name='addNewTask'),


3,编辑视图文件:
./mysite/study_system/views.py

def getUndoTaskList(request):'''@方法名称: 获取待完成任务列表@作    者: PandaCode辉@weixin公众号: PandaCode辉@创建时间: 2023-10-10'''# 响应容器rsp_dict = {}# 获取当前用户名username = request.session.get('username')# 根据用户名获取用户对象cur_user = StudyUser.objects.get(username=username)print('根据用户名查询用户对象:' + str(cur_user))user_list = [cur_user]# 如果当前用户是:3-学生,则查找对应辅导员用户if cur_user.role == 3:parent_id = cur_user.parent_id# 根据用户ID获取用户对象parent_user = StudyUser.objects.get(user_id=parent_id)print('根据用户ID获取用户对象:' + str(parent_user))user_list = [cur_user, parent_user]# 获取待完成任务列表data_list = StudyTask.objects.filter(task_status=0, created_by__in=user_list).order_by('-pk')# 查询待完成任务列表rsp_dict['data_list'] = data_listcontext_object_name = "undo_task_list"template_name = "study_system/home.html"# 'html_file': 'xxx.html' 动态指定模板页面 ; 'menuTo': 'task' = 任务管理 ;rsp_dict['html_file'] = 'study_system/task/undoTaskList.html'rsp_dict['menuTask'] = 'menuTask'rsp_dict['context_object_name'] = context_object_namereturn render(request, template_name, rsp_dict)def toNewTask(request):'''@方法名称: 跳转到发布新任务视图@作    者: PandaCode辉@weixin公众号: PandaCode辉@创建时间: 2023-10-10'''rsp_dict = {}rsp_dict["pageTitle"] = "新增任务"# 'html_file': 'xxx.html' 动态指定模板页面 ; 'menuTo': 'task' = 任务管理 ;rsp_dict['html_file'] = 'study_system/task/addTask.html'rsp_dict['menuTask'] = 'menuTask'return render(request, "study_system/home.html", rsp_dict)def addNewTask(request):'''@方法名称: ajax请求, 表单视图,发布新任务@作    者: PandaCode辉@weixin公众号: PandaCode辉@创建时间: 2023-10-10'''# 初始化响应容器rsp_dict = {"result": "error", "errorMsg": "系统错误"}# 是否ajax请求if request.is_ajax():try:rest = request.POSTtask_title = rest['taskTitle']task_type = int(rest['taskType'])task_description = rest['taskDescription']reward_points = int(rest['rewardPoints'])deadline_days = int(rest['deadlineDays'])actual_days = 0task_status = 0# 获取当前用户名username = request.session.get('username')# 根据用户名获取用户对象cur_user = StudyUser.objects.get(username=username)print('根据用户名查询用户对象:' + str(cur_user))# 创建者ID,使用 StudyUser 对象赋值created_by = cur_user# 今天# UTC格式当前时区时间t = time.localtime()work_date = time.strftime("%Y-%m-%d %H:%M:%S", t)print('当前日期时间:' + str(work_date))# 创建对象并保存到数据库study_task = StudyTask(task_title=task_title, task_type=task_type, task_description=task_description,reward_points=reward_points, deadline_days=deadline_days, task_status=task_status,actual_days=actual_days, created_by=created_by, created_time=work_date,update_time=work_date)# 保存到数据库是否成功study_task.save()rsp_dict["result"] = "success"except Exception as e:rsp_dict["errorMsg"] = "发布新任务保存到数据库失败."# 成功与否都返回json数据格式return JsonResponse(rsp_dict)

4,编辑页面模板代码:

4.1. 待完成任务列表页面
./mysite/study_system/templates/study_system/task/undoTaskList.html

{% if request.session.role == 1 or request.session.role == 2  or request.session.role == 4 %}{# 【角色 :1-系统管理员 】#}{# 【角色 :2-辅导员 】#}{# 【角色 :4-自导自学 】#}<div><a href="/study_system/task/toNewTask/" class="btn btn-default btn-lg btn-block btn-a">发布新任务</a></div>
{% endif %}
<!-- 结果显示区 -->
<div id="dataList">{% if data_list %}{% for studyTask in data_list %}<ul class="dataCardList"><li class="btn-group btn-group-justified">{% if request.session.role == 1 or request.session.role == 2 or request.session.role == 4 %}{# 【角色 :1-系统管理员 】#}{# 【角色 :2-辅导员 】#}{# 【角色 :4-自导自学 】#}<a href="#"class="btn btn-default btn-lg">修改</a><a href="#" class="btn btn-default btn-lg">删除</a>{% elif request.session.role == 3 %}{# 【角色 :3-学生用户 】#}<a href="#" class="btn btn-default btn-lg">删除</a>{% endif %}</li><li>【任务ID :{{ studyTask.task_id }}】</li><li>【任务发布者 :{{ studyTask.created_by.username }}】</li><li>【发布时间 :{{ studyTask.update_time|date:'Y-m-d H:i:s' }}】</li><li>【任务名称 :{{ studyTask.task_title }}】</li>{% if studyTask.task_type == "1" %}<li style='color: blue'>【任务类型 :1-系统任务】</li>{% elif studyTask.task_type == "2" %}<li>【任务类型 :2-辅导员任务】</li>{% endif %}<li>【任务内容说明 :{{ studyTask.task_description }}】</li><li>【计划完成天数 :{{ studyTask.deadline_days }} 天】</li><li style='color: red'>【成功奖励 :+{{ studyTask.reward_points }} 积分】</li>{#                除法 : {% widthratio 5 100 1%}#}{#                note:等同于:(5 / 100) * 1,则结果返回0.05,和乘法一样,使「参数3」= 1就是除法了。#}{#                失败处罚积分为成功奖励积分的一半,所以是 undoTask.7 / 2#}<li style='color: green'>【失败处罚 :-{% widthratio studyTask.reward_points 2 1 %} 积分】</li>{% if request.session.role == 1 or request.session.role == 3  or request.session.role == 4 %}{# 【角色 :1-系统管理员 】#}{# 【角色 :3-学生 】#}{# 【角色 :4-自导自学 】#}<li><a href="#"class="btn btn-default btn-lg btn-block btn-a">完成</a></li>{% endif %}</ul>{% endfor %}{% else %}<strong>查无记录</strong>{% endif %}
</div>

4.2. 发布任务页面
./mysite/study_system/templates/study_system/task/addTask.html

<script type="text/javascript">function addNewTask() {var taskTitle = $("#taskTitle").val();var taskType = $("#taskType").val();var taskDescription = $("#taskDescription").val();var deadlineDays = $("#deadlineDays").val();var rewardPoints = $("#rewardPoints").val();// 1,获取csrfmiddlewaretoken的input标签value属性对应的值{#var token = $('[name="csrfmiddlewaretoken"]').val();#}// 2,直接就能得到 csrfmiddlewaretoken 的input标签value属性的值var csrf_token = '{{ csrf_token }}';$.post("/study_system/task/addNewTask/",{'taskTitle': taskTitle,'taskType': taskType,'taskDescription': taskDescription,'deadlineDays': deadlineDays,'rewardPoints': rewardPoints,// 将token值放到请求数据部分,token的键必须是 csrfmiddlewaretoken'csrfmiddlewaretoken': csrf_token,}, function (data) {if ("success" == data.result) {alert("发布成功");window.location.href = "/study_system/task/getUndoTaskList";} else {alert("发布失败:" + data.errorMsg);}});}
</script>
<div class="container"><h1 class="text-center">发布新任务</h1><form action="/study_system/task/addNewTask/" method="post" class="form-horizontal" role="form">{% csrf_token %}{#        在Django中提交数据到后端服务的时候,为了安全,要使用CSRF(跨站请求伪造)。#}{#        跨站请求伪造的问题在于,服务器信任来自客户端的数据。#}{#        常规的做法是在template模板HTML文件中的form表单 中添加 {% csrf_token %} 可以实现安全提交。#}{#        当我们使用from表单标签来发送请求时,如果需要csrf_token认证,那么必须将它写到我们的form表单标签里面,里面的任意位置。#}{#        生成的隐藏标签为:#}{#        <input type="hidden" name="csrfmiddlewaretoken" value="WVHKQeAuMS4RGqyLybryIBAfacDa1Dp7PEaB3Badv3y0fvLqydX36xAVen6z3oS4">#}<div class="form-group"><label for="taskType" class="col-sm-2 control-label">任务类型</label><div class="col-sm-10"><select class="form-control" name="taskType"  id="taskType">{% if request.session.role == 1 %}<option value="1" selected="selected">1-系统任务</option>{% elif request.session.role == 2 %}<option value="2" selected="selected">2-辅导员任务</option>{% endif %}</select></div></div><div class="form-group"><label for="taskTitle" class="col-sm-2 control-label">任务名称</label><div class="col-sm-10"><input type="text" class="form-control" name="taskTitle"  id="taskTitle" maxlength="12" size="20" placeholder="请输入任务名称"></div></div><div class="form-group"><label for="taskDescription" class="col-sm-2 control-label">任务内容说明</label><div class="col-sm-10"><textarea name="taskDescription"  id="taskDescription" class="form-control" rows="4"></textarea></div></div><div class="form-group"><label for="deadlineDays" class="col-sm-2 control-label">计划完成天数</label><div class="col-sm-10"><input type="text" class="form-control"  name="deadlineDays" id="deadlineDays" placeholder="请输入计划完成天数"></div></div><div class="form-group"><label for="rewardPoints" class="col-sm-2 control-label">任务奖励积分</label><div class="col-sm-10"><input type="text" class="form-control" name="rewardPoints" id="rewardPoints" placeholder="请输入任务奖励积分"></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><a href="javascript:addNewTask()" class="btn btn-default btn-lg btn-block btn-a">提交发布</a></div></div></form>
</div>


第二步:运行测试-任务管理功能

1,登录用户后,先查看待完成任务列表页面

2,发布新任务页面

 -------------------------------------------------end -------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、BurpSuite Decoder解码器

一、编码解码 解释&#xff1a;BurpSuite 可以用这个模块来轻松进行编码解码&#xff0c;下面是支持的类型 URL HTML Base64 ASCIIhex Hex Octal Binary Gzip 注意&#xff1a;特别注意的是URL编码&#xff0c;一般的在线网站都无法对比如‘abc’的文本编码&#xff0c;burps…

目标检测及锚框、IoU

1. 目标检测 物体检测&#xff08;目标检测&#xff09;是计算机视觉和数字图像处理的热门方向&#xff0c;意在判断一幅图像上是否存在感兴趣物体&#xff0c;并给出物体分类及位置等&#xff08;What and Where&#xff09;。本文主要进行物体检测研究背景、发展脉络、相关算…

禁止chrome浏览器更新方式

1、禁用更新服务 WinR调出运行&#xff0c;输入services.msc&#xff0c;进入服务。 在服务中有两个带有Google Update字样&#xff0c;双击打开后禁用&#xff0c;并把恢复选项设置为无操作。 2、删除计划任务 运行taskschd.msc&#xff0c;打开计划任务程序库&#xff0c;在…

SDRAM学习笔记(MT48LC16M16A2,w9812g6kh)

一、基本知识 SDRAM : 即同步动态随机存储器&#xff08;Synchronous Dynamic Random Access Memory&#xff09;, 同步是指其时钟频率与对应控制器&#xff08;CPU/FPGA&#xff09;的系统时钟频率相同&#xff0c;并且内部命令 的发送与数据传输都是以该时钟为基准&#xff…

【C#】LIMS实验室信息管理系统源码

一、系统概述 LIMS(Laboratory Information Management System)即实验室信息管理系统,是通过对样品检验流程、分析数据及报告、实验室资源和客户信息等要素的综合管理,按照标准化实验室管理规范,建立符合实验室业务流程的质量体系,实现实验室信息化管理。是实验室提高分析水平…

CSS 滚动驱动动画与 @keyframes 新语法

CSS 滚动驱动动画与 keyframes 在 CSS 滚动驱动动画相关的属性出来之后, keyframes 也迎来变化. 以前, keyframes 的值可以是 from, to, 或者百分数. 现在它多了一种属性的值 <timeline-range-name> <percentage> 建议先了解 animation-range 不然你会对 timeli…

[RISC-V]verilog

小明教IC-1天学会verilog(7)_哔哩哔哩_bilibili task不可综合&#xff0c;function可以综合

4+非肿瘤纯生信。氧化应激+WGCNA+药物预测筛序关键基因

今天给同学们分享一篇非肿瘤氧化应激WGCNA的生信文章“Identification of oxidative stress-related biomarkers associated with the development of acute-on-chronic liver failure using bioinformatics”&#xff0c;这篇文章于2023年10月10日发表在Scientific Reports期刊…

数据库数据恢复—Oracle数据库报错ORA-01110错误的数据恢复案例

Oracle数据库故障&#xff1a; 北京某公司一台运行oracle数据库的服务器&#xff0c;机房意外断电导致该服务器重启&#xff0c;重启后发现oracle数据库报错。该Oracle数据库没有备份。 Oracle数据库数据恢复过程&#xff1a; 1、北亚企安数据恢复工程师检查该oracle数据库的数…

input改造文件上传,el-table的改造,点击上传,拖拽上传,多选上传

第一个input标签效果 第二个input标签的效果 el-table的改造效果 <template><div class"outerBox"><div class"analyze" v-if"status"><div class"unFile"><div class"mainBox"><img clas…

黔院长 | 黄帝内经:人有四经十二从!

"人有四经十二从"这句话出自《黄帝内经素问》&#xff0c;“四经”指的是与四时相应的正常脉象&#xff0c;也是指四个主要经络&#xff1a;太阳经、少阳经、太阴经和少阴经。在中医理论当中这些经络被认为是人体气血运行的通道。 而“十二从”则表示人体的十二个经脉…

计算机毕设 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天向大家介绍 一个深度学习项目 基于CNN实现谣言检测 1.1 背景 社交媒体的发展在加速信息传播的…

ChatGLM3 本地部署的解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Java 将list集合的字符串格式转为Map

Java 将list集合的字符串格式转为Map List<Object> list new ArrayList<>(); Map<String,String> map1 new HashMap<>(); map1.put("fileName","测试1"); map1.put("level","1"); list.add(map1);Map<S…

[Java]前中后序遍历二叉树/递归与非递归

一、递归方法 首先&#xff0c;树形结构都是由递归方式定义的。那么递归是怎么用的&#xff1f; 1、终止条件&#xff1b;2、调用自身 分析 1、什么时候停止&#xff1f; 当结点值为空的时候&#xff0c;返回null&#xff1b; 2、如何调用自身&#xff1f; 以前序遍历为例&…

php之 角色的权限管理(RBAC)详解

RBAC&#xff08;Role-based access control&#xff09;是一种常见的权限管理模型&#xff0c;通过将用户分配至特定的角色&#xff0c;以及为角色分配访问权限&#xff0c;实现了权限管理的目的。以下是关于RBAC的详细解释&#xff1a; 角色&#xff1a;RBAC模型的核心是角色…

Ubuntu编译 PCL 1.13.1 详细流程

Ubuntu编译 PCL 1.13. 详细流程 一、编译环境二、虚拟机准备1. 虚拟机扩容2. 配置交换分区 三、Cmake - gui 生成 MakeFile1. 解决 flann 依赖问题2. 配置 Cmake 四、编译安装1.编译&#xff1a;2. 安装 一、编译环境 Ubuntu&#xff1a;Ubuntu 20.04 VMware&#xff1a;VMwar…

如何学好C++?学习C和C++的技巧是什么?

如何学好C?学习C和C的技巧是什么&#xff1f; 你这三个问题&#xff0c;前两个都是意思是差不多的&#xff0c;那么怎么怎么学习C/C我来问答一下&#xff1a;最近很多小伙伴找我&#xff0c;说想要一些C资料&#xff0c;然后我根据自己从业十年经验&#xff0c;熬夜搞了几个通…

【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构

完全解耦的时间片轮询框架构 简介项目代码timeslice.htimeslice.clist.hlist.c 创建工程移植代码实验函数说明timeslice_task_inittimeslice_task_addtimeslice_tak_deltimeslice_get_task_num 结尾 简介 timeslice是一个时间片轮询框架&#xff0c;他是一个完全解耦的时间片轮…

三十七、【进阶】验证索引的效率

1、准备工作&#xff1a; 创建一张表&#xff0c;该表中有一千万条数据&#xff0c;名为tb_sku&#xff1b; 2、使用主键查询&#xff1a; select * from tb_stu where id1\G; 3、使用非索引查询&#xff1a; 4、给sn字段创建索引&#xff1a; 在创建过程中&#xff0c;发现…