接着上期代码框架,开发第5个功能,兑换物品管理,再增加一个学习兑换物品表,主要用来维护兑换物品,所需积分,物品状态等信息,还有一个积分流水表,完成任务奖励积分,兑换物品消耗积分。

要想激励一个人的学习动力,最好能有实际的奖励,完成任务后,系统应给予一定的奖励,如积分或实际物品等。

目前系统考虑使用积分奖励,然后这些积分积累多了就可以兑换实际物品,这些奖励可以激励用户持续学习。

第一步:编写第5个功能-兑换物品管理

1,编辑模型文件:

./mysite/study_system/models.py:

# 更多代码内容请关注weixin公众号: PandaCode辉

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

# 更多代码内容请关注weixin公众号: PandaCode辉

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

def getExchangeItemList(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 = StudyExchangeItem.objects.filter(created_by__in=user_list).order_by('-pk') rsp_dict['data_list'] = data_list context_object_name = "exchange_item_list"
template_name = "study_system/home.html"
rsp_dict['html_file'] = 'study_system/item/exchangeItemList.html'
rsp_dict['context_object_name'] = context_object_name return render(request, template_name, rsp_dict) def toNewExchangeItem(request):
'''
@方法名称: 跳转到新增兑换物品视图
@作 者: PandaCode辉
@weixin公众号: PandaCode辉
@创建时间: 2023-10-10
'''
rsp_dict = {}
rsp_dict["pageTitle"] = "新增兑换物品"
rsp_dict['html_file'] = 'study_system/item/addExchangeItem.html' return render(request, "study_system/home.html", rsp_dict) def addExchangeItem(request):
'''
@方法名称: ajax请求, 表单视图,新增兑换物品
@作 者: PandaCode辉
@weixin公众号: PandaCode辉
@创建时间: 2023-10-10
'''
# 初始化响应容器
rsp_dict = {"result": "error", "errorMsg": "系统错误"}
# 是否ajax请求
if request.is_ajax():
try:
rest = request.POST
item_name = rest['itemName']
item_points = int(rest['itemPoints'])
item_description = rest['itemDescription']
item_status = rest['itemStatus']
# 获取当前用户名
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)) # 创建对象并保存到数据库
studyExchangeItem = StudyExchangeItem(item_name=item_name, item_points=item_points,
item_description=item_description, item_status=item_status,
created_time=work_date, update_time=work_date,
created_by=created_by)
# 保存到数据库是否成功
studyExchangeItem.save()
rsp_dict["result"] = "success"
except Exception as e:
rsp_dict["errorMsg"] = "新增兑换物品保存到数据库失败." # 成功与否都返回json数据格式
return JsonResponse(rsp_dict)

兑换物品视图,更新物品状态,同时添加消耗积分流水。

# 更多代码内容请关注weixin公众号: PandaCode辉

4,编辑页面模板代码:

4.1. 兑换物品列表页面
./mysite/study_system/templates/study_system/item/exchangeItemList.html

# 更多代码内容请关注weixin公众号: PandaCode辉

4.2. 新增兑换物品页面
./mysite/study_system/templates/study_system/item/addExchangeItem.html

# 更多代码内容请关注weixin公众号: PandaCode辉

第二步:运行测试-兑换物品管理功能

1,登录用户后,点击查看兑换物品列表页面

点击可兑换物品,如果用户积分充足,则兑换成功,更新物品状态。

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

Django实战项目-学习任务系统-兑换物品管理的更多相关文章

  1. Node.js实战项目学习系列(1) 初识Node.js

    前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...

  2. 01-Flutter移动电商实战-项目学习记录

    一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常学着学着就不学了),故采用博客监督以记之. 1. ...

  3. [Django]用户权限学习系列之权限管理界面实现

    本系列前三章: http://www.cnblogs.com/CQ-LQJ/p/5604331.htmlPermission权限基本操作指令 http://www.cnblogs.com/CQ-LQJ ...

  4. Django ---- blog项目学习所得

    一.登录功能 1.采用ajax 提交form表单的方式 2.后台生成随机验证码,登录时提交验证码 3.用PLI库生成随机验证码,置于session中,登录时与前台提交的code进行upeer()的验证 ...

  5. SpringMVC+Mybatis+Mysql实战项目学习--环境搭建

    1.开发IDE:Spring Tool Suite(自带maven插件) 下载地址https://spring.io/tools/sts/all 在STS.ini配置信息中加下面一行 保证编码格式为u ...

  6. Node.js实战项目学习系列(2) 开发环境和调试工具

    前言 上一节让我们对Node.js有一个初步的了解,那么现在可以开始正式学习下Node.js的开发了,但是任何一门语言要设计到开发,就必须先学习开发环境以及调试.本文将主要讲解这些内容. 本文涉及到的 ...

  7. Node.js实战项目学习系列(4) node 对象(global、process进程、debug调试)

    前言 在之前的课程我们学习了Node的模块化规则,接下来我们将学习下 Node的几个新特性:global ,process进程,debug调试 global 跟在浏览器中的window一样都是全局变量 ...

  8. Node.js实战项目学习系列(5) node基础模块 path

    前言 前面已经学习了很多跟Node相关的知识,譬如开发环境.CommonJs,那么从现在开始要正式学习node的基本模块了,开始node编程之旅了. path path 模块提供用于处理文件路径和目录 ...

  9. Node.js实战项目学习系列(3) CommonJS 模块化规范

    前言 想开始编写Node.js代码,那么我们就必须先熟悉它的模块化规范CommonJS,本文将详细讲解CommonJS规范 本文代码 >>> github 地址 CommonJS N ...

  10. Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据

    基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...

随机推荐

  1. Qt开源作品9-扁平化样式flatui

    一.前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反 ...

  2. 不为人知的网络编程(十六):深入分析与解决TCP的RST经典异常问题

    本文由腾讯技术kernel分享,原题"TCP经典异常问题探讨与解决",下文进行了排版和内容优化等. 1.引言 TCP的经典异常问题无非就是丢包和连接中断,在这里我打算与各位聊一聊T ...

  3. Royal Elementor Addons Pro v1.3.987 + v1.5.0 elementor网页设计元素组件插件下载

    Royal Elementor Addons Pro elementor网页设计元素组件插件破解版简介&下载 Royal Elementor Addons Pro Nulled Element ...

  4. 优化博客Ⅱ-CDN加速

    CDN加速 自从有了第一次博客优化经验,我就越发对优化感兴趣了嘿嘿(✧∇✧). 看着博客首页打开时长为1200ms左右,我又开始琢磨有什么办法能再给网站提提速,让访问时间降低到1000ms以下,这时候 ...

  5. 字体查看比较工具 -- (采用wpf开发)

    为了进一步加深对字体文件的理解,我写了这个小工具.可以查看字体文件信息.显示字体文件包含的字体.可以从字体文件中抽取字体,保存为其子集. 加入qq群:565438497,下载最新程序. 1 显示字体文 ...

  6. CDS标准视图:功能位置种类描述 I_FlocCategoryText

    视图名称:功能位置种类描述 I_FlocCategoryText 视图类型:基础 视图代码: 点击查看代码 @EndUserText.label: 'Functional Location - Tex ...

  7. HBase-2JavaAPI操作

    HBase是一个分布式的NoSql数据库,在实际工作当中,我们一般都可以通过JavaAPI来进行各种数据的操作,包括创建表,以及数据的增删改查等等 1 创建maven工程 讲如下内容作为maven工程 ...

  8. ClickHouse-1介绍

    https://clickhouse.com/docs/zh/ 一.clickhouse简介 ClickHouse 是俄罗斯的Yandex开源的用于在线分析处理查询(OLAP :Online Anal ...

  9. 一文读懂ROS开发,解锁RK3562J + Ubuntu工业平台应用

    在工业智能化浪潮中,智能机器人设备是成为工业自动化体系的璀璨之星,而其核心 --ROS系统,更是机器人领域的集大成者.今天,和大家分享一个ROS开发案例,基于RK3562J + Ubuntu工业平台. ...

  10. linux--安装zeppelin

    可以下载源码安装也可以用docker安装 http://zeppelin.apache.org/download.html Zeppelin 安装目录的bin文件夹下,使用以下命令启动进程: /opt ...