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.rhkb.cn/news/171906.html

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

相关文章

信钰证券:华为汽车概念股持续活跃 圣龙股份斩获12连板

近期&#xff0c;华为轿车概念股在A股商场遭到热捧&#xff0c;多只股票迭创前史新高。10月23日&#xff0c;华为轿车概念股再度走强&#xff0c;到收盘&#xff0c;板块内圣龙股份、银宝山新涨停&#xff0c;轿车ETF在重仓股提振下盘中一度上涨近2%。业界人士认为&#xff0c;…

基于SSM和VUE的留守儿童信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

基于springboot实现校园志愿者管理系统项目【项目源码+论文说明】

基于springboot实现校园志愿者管理系统演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;校园志愿者管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff…

Java练习题2022-1

HashSet是Java中常用的Set集合&#xff0c;向HashSet集合中添加数据对象时&#xff0c;首先会调用对象的hashCode()方法获取哈希码&#xff0c;根据哈希码计算对象的存储位置&#xff0c;如果相应位置上已经有数据对象&#xff0c;则会调用对象的equals()方法判断新加入的对象与…

2023软件测试高频面试题

前言 今天&#xff0c;我们来整理与解析一些比较高频的测试行业面试题&#xff0c;大家可以通过面试题内的一些解析&#xff0c;再结合自己的真实工作经验来进行答题思路的提取、整理。 友情提示&#xff1a;硬背答案虽可&#xff0c;但容易翻车哦。 同时&#xff0c;我也准备…

linux中nginx配置https

一、版本适配 版本一定要适配&#xff0c;否则会报错各种参数定位不到不识别的错误&#xff0c;以下是版本适配信息&#xff0c;各位观客自行按照以下信息匹配版本。 Nginx 1.11.5及以上版本与OpenSSL 1.0.2及以上版本兼容。Nginx 1.15.2及以上版本与OpenSSL 1.1.1及以上版本兼…

IDEA部署SSM项目mysql数据库MAVEN项目部署教程

如果 SSM 项目是基于 Maven 构建的&#xff0c;则需要配置 maven 环境&#xff0c;否则跳过这一步 步骤一&#xff1a;配置 Maven 第一步&#xff1a;用 IDEA 打开项目&#xff0c;准备配置 maven 环境 &#xff0c;当然如果本地没有提前配置好 maven&#xff0c;就用 IDEA 默…

FindDiff_Qt找不同项目

文章目录 项目简介源代码widget.hwidget.cppwidget.ui配置文件找不同.json 项目简介 开发平台 win10Qt6.6msvc2022 简介 微信上有一些好玩的游戏, 找不同一种比较轻松有趣的游戏,也曾经在街机上被坑过N币, 玩了几次后,发现还是太难了,于是开始截屏放大,慢慢找,再然后就发展到截…

云原生安全:如何保护云上应用不受攻击

文章目录 云原生安全的概念1. 多层次的安全性2. 自动化安全3. 容器安全4. 持续监控5. 合规性 云原生安全的关键挑战1. 无边界的环境2. 动态性3. 多云环境4. 容器化应用程序5. API和微服务 如何保护云上应用不受攻击1. 身份验证和访问控制示例代码&#xff1a; 2. 数据加密示例代…

基于SSM的航班订票管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

SDRAM学习笔记(MT48LC16M16A2,w9812g6kh)

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

【Javascript】编写⼀个函数,排列任意元素个数的数字数组,按从⼩到⼤顺序输出

目录 sort方法 两个for循环 写法一&#xff1a; 写法二&#xff1a; sort方法 var list[3,6,2,8,1,7];list.sort();console.log(list);使用sort方法有局限&#xff0c;适合元素为个位数 var list[3,6,80,100,78,4];list.sort();console.log(list);如果元素 解决方法&#xf…

PY32F002A系列单片机:高性价比、低功耗,满足多样化应用需求

PY32F002A系列微控制器是一款高性能、低功耗的MCU&#xff0c;它采用32位ARM Cortex-M0内核&#xff0c;最高工作频率达到24MHz&#xff0c;提供了强大的计算能力。此外&#xff0c;PY32F002A拥有最大20Kbytes的flash存储器和3Kbytes的SRAM&#xff0c;为简单的数据处理提供了充…

asp.net教务管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计

一、源码特点 asp.net 教务管理信息系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net教务管理系统 应用技术&a…

①【数据库操作】 MySQL数据库的查询、创建、删除、使用。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 目录 数据库相关概念数据库的查询、创建、删除…

数据结构绪论,基本概念

目录 1.什么是数据结构&#xff1f; 2.三种数据结构&#xff1a; 3.第一章绪论 了解概念 1.几个概念 2.数据存储方式&#xff1a; 3.算法的五个重要特性: 4.算法设计的要求: 1.什么是数据结构&#xff1f; 数据 数据&#xff0c;是对客观事物的符号表示&#xff0c;在计…

将自己本地项目上传到git,IDEA图文操作

文章目录 一、初始化git仓库二、gitee创建仓库三、输入自己仓库的地址四、在添加所修改的文件可能的错误 五、合并需上传文件六、上传参考文档 一、初始化git仓库 在自己的项目中&#xff0c;命令行中输入 git init二、gitee创建仓库 新建仓库 设置仓库参数&#xff0c;设置…

iOS Autolayout 约束设置【顺序】的重要性!

0x00 顺序不同&#xff0c;结果不同 看图说话 1 代码是这样滴~ 设置好约束&#xff0c;让 4 个按钮&#xff0c;宽度均分~ 结果如上图 [_pastButton.topAnchor constraintEqualToAnchor:_textView.bottomAnchor constant:6].active YES;[_pastButton.leftAnchor constraintEq…

Postman如何导出接口的几种方法?

本文主要介绍了Postman如何导出接口的几种方法&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 前言&#xff1a; 我的文章还是一贯的作风&#xff0c;简确用风格&#xff08;简单确实有用&#xff09;&a…

从REST到GraphQL:升级你的Apollo体验

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…