接着上期代码框架,开发第6个功能,用户管理,查看用户信息和学生用户属性值,尤其是总积分值,还可以查看积分流水明细,完成任务奖励积分,兑换物品消耗积分。
第一步:编写第6个功能-用户管理
1,编辑模型文件:
./mysite/study_system/models.py:
无新增模型
2,编辑urls配置文件:
./mysite/study_system/urls.py
# 用户管理url
path('user/getUserInfo/', views.getUserInfo, name='getUserInfo'),
path('user/toModUserInfo/', views.toModUserInfo, name='toModUserInfo'),
path('user/updateUserInfo/', views.updateUserInfo, name='updateUserInfo'),
# 积分流水url
path('item/getStudyPointsList/', views.getStudyPointsList, name='getStudyPointsList'),
3,编辑视图文件:
./mysite/study_system/views.py
def getUserInfo(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))
try:
# 学生用户总积分值,需要取学生用户,关联的属性表的值
cur_user_attr = StudyUserAttribute.objects.get(user_id=cur_user)
rsp_dict['cur_user_attr'] = cur_user_attr
except Exception as e:
print('根据用户名查询属性表,查无记录.')
template_name = "study_system/home.html"
rsp_dict["pageTitle"] = "用户信息"
rsp_dict['html_file'] = 'study_system/user/userInfo.html'
rsp_dict['cur_user'] = cur_user
return render(request, template_name, rsp_dict)
def toModUserInfo(request):
'''
@方法名称: 跳转到修改用户视图
@作 者: PandaCode辉
@weixin公众号: PandaCode辉
@创建时间: 2023-10-10
'''
# 响应容器
rsp_dict = {}
rest = request.GET
user_id = rest['userId']
# 根据用户名获取用户对象
cur_user = StudyUser.objects.get(user_id=user_id)
print('查询用户对象:' + str(cur_user))
try:
# 学生用户总积分值,需要取学生用户,关联的属性表的值
cur_user_attr = StudyUserAttribute.objects.get(user_id=cur_user)
rsp_dict['cur_user_attr'] = cur_user_attr
except Exception as e:
print('根据用户名查询属性表,查无记录.')
rsp_dict["pageTitle"] = "修改用户"
rsp_dict['html_file'] = 'study_system/user/updateUserInfo.html'
rsp_dict['cur_user'] = cur_user
return render(request, "study_system/home.html", rsp_dict)
def updateUserInfo(request):
'''
@方法名称: ajax请求, 表单视图,更新用户信息
@作 者: PandaCode辉
@weixin公众号: PandaCode辉
@创建时间: 2023-10-10
'''
# 初始化响应容器
rsp_dict = {"result": "error", "errorMsg": "系统错误"}
# 是否ajax请求
if request.is_ajax():
try:
rest = request.POST
# 用户值
user_id = int(rest['userId'])
username = rest['userName']
password = rest['password']
email = rest['email']
phone_num = rest['phoneNum']
role = int(rest['role'])
# 根据ID查询对象数据, filter 返回的是列表对象,一个对象取list.0
studyUser = StudyUser.objects.filter(user_id=user_id)
# 今天
# UTC格式当前时区时间
t = time.localtime()
work_date = time.strftime("%Y-%m-%d %H:%M:%S", t)
print('当前日期时间:' + str(work_date))
# 保存到数据库是否成功,更新用户表
studyUser.update(username=username, password=password,
email=email, phone_num=phone_num, update_time=work_date)
print('更新用户表成功.')
# 属性值
study_level = int(rest['studyLevel'])
# 用户属性值,学习级别,不为空,则更新属性值
if study_level != "":
# 属性值
study_level = int(rest['studyLevel'])
intelligence = int(rest['intelligence'])
memory = int(rest['memory'])
diligence = int(rest['diligence'])
physical_fitness = int(rest['physicalFitness'])
other_subjects = rest['otherSubjects']
notes = rest['notes']
# 根据用户名获取用户对象
cur_user = StudyUser.objects.get(user_id=user_id)
# print('查询用户对象:' + str(cur_user))
# 学生用户总积分值,需要取学生用户,关联的属性表的值
studyUserAttribute = StudyUserAttribute.objects.filter(user_id=cur_user)
# 保存到数据库是否成功,更新用户属性表
studyUserAttribute.update(study_level=study_level, intelligence=intelligence,
memory=memory, diligence=diligence,
physical_fitness=physical_fitness,
other_subjects=other_subjects, notes=notes,
update_time=work_date)
print('更新用户属性表成功.')
rsp_dict["result"] = "success"
except Exception as e:
rsp_dict["errorMsg"] = "更新用户信息,保存到数据库失败."
# 成功与否都返回json数据格式
return JsonResponse(rsp_dict)
def getStudyPointsList(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))
#查询积分列表
data_list = StudyPoint.objects.filter(user_id=cur_user).order_by('-created_time')
rsp_dict['data_list'] = data_list
context_object_name = "study_points_list"
template_name = "study_system/home.html"
rsp_dict['html_file'] = 'study_system/item/studyPointsList.html'
rsp_dict['context_object_name'] = context_object_name
return render(request, template_name, rsp_dict)
4,编辑页面模板代码:
4.1. 用户管理页面
./mysite/study_system/templates/study_system/user/userInfo.html
{% if cur_user %}
- 【用户ID :{{ cur_user.user_id }}】
- 【用户名 :{{ cur_user.username }}】
- 【邮箱 : {{ cur_user.email }}】
- 【手机号码 : {{ cur_user.phone_num }}】
{% if cur_user.role == 1 %}
- 【角色 :系统管理员 】
{% elif cur_user.role == 2 %}
- 【角色 :辅导员 】
{% elif cur_user.role == 3 %}
- 【角色 :学生 】
{% elif cur_user.role == 4 %}
- 【角色 :自导自学 】
{% endif %}
{# 学生用户属性值#}
{% if cur_user_attr %}
{% if cur_user_attr.study_level == 1 %}
- 【级别 :Lv1-小学 】
{% elif cur_user_attr.study_level == 2 %}
- 【级别 :Lv2-初中 】
{% elif cur_user_attr.study_level == 3 %}
- 【级别 :Lv3-高中 】
{% elif cur_user_attr.study_level == 4 %}
- 【级别 :Lv4-本科 】
{% elif cur_user_attr.study_level == 5 %}
- 【级别 :Lv5-硕士 】
{% elif cur_user_attr.study_level == 6 %}
- 【级别 :Lv6-博士 】
{% elif cur_user_attr.study_level == 7 %}
- 【级别 :Lv7-博士后 】
{% endif %}
- 【智力 :{{ cur_user_attr.intelligence }} 点】
- 【记忆力 :{{ cur_user_attr.memory }} 点】
- 【勤奋力 :{{ cur_user_attr.diligence }} 点】
- 【体能 :{{ cur_user_attr.physical_fitness }} 点】
-
【总积分 :{{ cur_user_attr.total_points }} 点】
积分明细
- 【学科属性 :{{ cur_user_attr.other_subjects }}】
- 【备注提醒 :{{ cur_user_attr.notes }}】
{% endif %}
- 【更新时间 :{{ cur_user.update_time| date:'Y-m-d H:i:s' }}】
-
修改用户信息
{% else %}
查无记录
{% endif %}
4.2. 修改用户信息页面
./mysite/study_system/templates/study_system/user/updateUserInfo.html
更新用户信息
{% if cur_user %}
{% else %}
查无记录
{% endif %}
第二步:运行测试-用户管理功能
1,登录用户后,点击查看用户信息页面
2,点击查看积分明细页面
3,点击修改用户页面
-------------------------------------------------end -------------------------------------------------