接着上期代码框架,开发第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

<!-- 结果显示区 -->
<div id="dataList">
{% if cur_user %}
<ul class="dataCardList">
<li>【用户ID :{{ cur_user.user_id }}】</li>
<li>【用户名 :{{ cur_user.username }}】</li>
<li>【邮箱 : {{ cur_user.email }}】</li>
<li>【手机号码 : {{ cur_user.phone_num }}】</li>
{% if cur_user.role == 1 %}
<li>【角色 :系统管理员 】</li>
{% elif cur_user.role == 2 %}
<li>【角色 :辅导员 】</li>
{% elif cur_user.role == 3 %}
<li>【角色 :学生 】</li>
{% elif cur_user.role == 4 %}
<li>【角色 :自导自学 】</li>
{% endif %}
{# 学生用户属性值#}
{% if cur_user_attr %}
{% if cur_user_attr.study_level == 1 %}
<li>【级别 :Lv1-小学 】</li>
{% elif cur_user_attr.study_level == 2 %}
<li>【级别 :Lv2-初中 】</li>
{% elif cur_user_attr.study_level == 3 %}
<li>【级别 :Lv3-高中 】</li>
{% elif cur_user_attr.study_level == 4 %}
<li>【级别 :Lv4-本科 】</li>
{% elif cur_user_attr.study_level == 5 %}
<li>【级别 :Lv5-硕士 】</li>
{% elif cur_user_attr.study_level == 6 %}
<li>【级别 :Lv6-博士 】</li>
{% elif cur_user_attr.study_level == 7 %}
<li>【级别 :Lv7-博士后 】</li>
{% endif %} <li>【智力 :{{ cur_user_attr.intelligence }} 点】</li>
<li>【记忆力 :{{ cur_user_attr.memory }} 点】</li>
<li>【勤奋力 :{{ cur_user_attr.diligence }} 点】</li>
<li>【体能 :{{ cur_user_attr.physical_fitness }} 点】</li>
<li class="strongTab">
<span>【总积分 :{{ cur_user_attr.total_points }} 点】
<a href="/study_system/item/getStudyPointsList/">积分明细</a>
</span>
</li>
<li>【学科属性 :{{ cur_user_attr.other_subjects }}】</li>
<li class="strongTab">【备注提醒 :{{ cur_user_attr.notes }}】</li>
{% endif %}
<li>【更新时间 :{{ cur_user.update_time| date:'Y-m-d H:i:s' }}】</li>
<li>
<a href="/study_system/user/toModUserInfo?userId={{ cur_user.user_id }}"
class="btn btn-default btn-lg btn-block btn-a">修改用户信息</a>
</li>
</ul>
{% else %}
<strong>查无记录</strong>
{% endif %}
</div>

4.2. 修改用户信息页面
./mysite/study_system/templates/study_system/user/updateUserInfo.html

<script type="text/javascript">

    function updateUserInfo() {
var userId = $("input[name='userId']").val();
var userName = $("input[name='userName']").val();
var password = $("input[name='password']").val();
var email = $("input[name='email']").val();
var phoneNum = $("input[name='phoneNum']").val();
var role = $("select[name='role']").val(); var studyLevel = "";
var intelligence = "";
var memory = "";
var diligence = "";
var physicalFitness = "";
var otherSubjects = "";
var notes = "";
var cur_user_attr = '{{ cur_user_attr }}';
// 用户属性不为空时
if (cur_user_attr) {
studyLevel = $("select[name='studyLevel']").val();
intelligence = $("input[name='intelligence']").val();
memory = $("input[name='memory']").val();
diligence = $("input[name='diligence']").val();
physicalFitness = $("input[name='physicalFitness']").val();
otherSubjects = $("textarea[name='otherSubjects']").val();
notes = $("textarea[name='notes']").val();
}
var csrf_token = '{{ csrf_token }}';
$.post("/study_system/user/updateUserInfo/",
{
'userId': userId,
'userName': userName,
'password': password,
'email': email,
'phoneNum': phoneNum,
'role': role,
'studyLevel': studyLevel,
'intelligence': intelligence,
'memory': memory,
'diligence': diligence,
'physicalFitness': physicalFitness,
'otherSubjects': otherSubjects,
'notes': notes,
// 将token值放到请求数据部分,token的键必须是 csrfmiddlewaretoken
'csrfmiddlewaretoken': csrf_token,
}, function (data) {
if ("success" == data.result) {
alert("更新成功");
window.location.href = "/study_system/user/getUserInfo/";
} else {
alert("更新失败:" + data.errorMsg);
}
});
}
</script>
<div class="container">
<h1 class="text-center">更新用户信息</h1>
{% if cur_user %}
<form action="/study_system/user/updateUserInfo/" method="post" class="form-horizontal" role="form">
{% csrf_token %}
<div class="form-group">
<label for="userId" class="col-sm-2 control-label">用户ID</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="userId" id="userId" value='{{ cur_user.user_id }}'
readonly="readonly">
</div>
</div>
<div class="form-group">
<label for="userName" class="col-sm-2 control-label">用户名</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="userName" id="userName"
value='{{ cur_user.username }}'
readonly="readonly">
</div>
</div>
<div class="form-group">
<label for="password" class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="password" class="form-control" name="password" id="password"
value='{{ cur_user.password }}'>
</div>
</div>
<div class="form-group">
<label for="email" class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="email" class="form-control" name="email" id="email"
value='{{ cur_user.email }}'>
</div>
</div>
<div class="form-group">
<label for="phoneNum" class="col-sm-2 control-label">手机号码</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="phoneNum" id="phoneNum"
value='{{ cur_user.phone_num }}'>
</div>
</div>
<div class="form-group">
<label for="role" class="col-sm-2 control-label">角色</label>
<div class="col-sm-10">
<select class="form-control" name="role" id="role">
{% if cur_user.role == 1 %}
<option value="1" selected="selected">1-系统管理员</option>
{% elif cur_user.role == 2 %}
<option value="2" selected="selected">2-辅导员</option>
{% elif cur_user.role == 3 %}
<option value="3" selected="selected">3-学生</option>
{% elif cur_user.role == 4 %}
<option value="4" selected="selected">4-自导自学</option>
{% endif %}
</select>
</div>
</div> {# 学生用户属性值#}
{% if cur_user_attr %} <h1 class="text-center">更新用户属性值</h1>
<div class="form-group">
<label for="studyLevel" class="col-sm-2 control-label">学习级别</label>
<div class="col-sm-10">
<select class="form-control" name="studyLevel" id="studyLevel">
<option value="1">Lv1-小学</option>
<option value="2">Lv2-初中</option>
<option value="3">Lv3-高中</option>
<option value="4">Lv4-本科</option>
<option value="5">Lv5-硕士</option>
<option value="6">Lv6-博士</option>
<option value="7">Lv7-博士后</option>
</select>
</div>
</div>
<div class="form-group">
<label for="intelligence" class="col-sm-2 control-label">智力</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="intelligence" id="intelligence"
value='{{ cur_user_attr.intelligence }}'>
</div>
</div>
<div class="form-group">
<label for="memory" class="col-sm-2 control-label">记忆力</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="memory" id="memory"
value='{{ cur_user_attr.memory }}'>
</div>
</div>
<div class="form-group">
<label for="diligence" class="col-sm-2 control-label">勤奋力</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="diligence" id="diligence"
value='{{ cur_user_attr.diligence }}'>
</div>
</div>
<div class="form-group">
<label for="physicalFitness" class="col-sm-2 control-label">体能</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="physicalFitness" id="physicalFitness"
value='{{ cur_user_attr.physical_fitness }}'>
</div>
</div>
<div class="form-group">
<label for="totalPoints" class="col-sm-2 control-label">总积分</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="totalPoints" id="totalPoints"
value='{{ cur_user_attr.total_points }}' readonly="readonly">
</div>
</div>
<div class="form-group">
<label for="otherSubjects" class="col-sm-2 control-label">学科属性</label>
<div class="col-sm-10">
<textarea name="otherSubjects" id="otherSubjects" class="form-control"
rows="4">{{ cur_user_attr.other_subjects }}</textarea>
</div>
</div>
<div class="form-group">
<label for="notes" class="col-sm-2 control-label">备注提醒</label>
<div class="col-sm-10">
<textarea name="notes" id="notes" class="form-control"
rows="4">{{ cur_user_attr.notes }}</textarea>
</div>
</div>
{% endif %} <div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<a href="javascript:updateUserInfo()" class="btn btn-default btn-lg btn-block btn-a">提交保存</a>
</div>
</div>
</form>
{% else %}
<strong>查无记录</strong>
{% endif %}
</div>
<script type="text/javascript">
// html加载的时候执行该函数
$(document).ready(function () {
{# 学生用户属性值#}
var cur_user_attr = '{{ cur_user_attr }}';
// 用户属性不为空时
if (cur_user_attr) {
// 学习级别,当前选中值
var study_level = '{{ cur_user_attr.study_level }}';
// 创建list数据,对应级别值
var level_list = [1, 2, 3, 4, 5, 6, 7,];
for (var index in level_list) {
var key = level_list[index];
{#alert("key:" + key);#}
if (study_level == key) {
{#方法1、设置value为pxx的项选中#}
$("select[name='studyLevel']").val(key);
}
}
}
// 创建json格式数据
{#var levelJson = [{level: 1, desc: "Lv1-小学"},#}
{# {level: 2, desc: "Lv2-初中"},#}
{# {level: 3, desc: "Lv3-高中"},#}
{# {level: 4, desc: "Lv4-本科"},#}
{# {level: 5, desc: "Lv5-硕士"},#}
{# {level: 6, desc: "Lv6-博士"},#}
{# {level: 7, desc: "Lv7-博士后"},#}
{#];#}
{#for (var index in levelJson) {#}
{# var key = levelJson[index].level;#}
{#var value = levelJson[index].desc;#}
{#if (study_level == key) {#}
{#alert("study_level:" + study_level);#}
{#方法1、设置value为pxx的项选中#}
{#$("select[name='studyLevel']").val(key);#}
{#方法2、设置text为pxx的项选中#}
{#$("select[name='studyLevel']").find("option[text=key]").attr("selected", true);#}
{# }#}
{#/}#}
}); </script>

第二步:运行测试-用户管理功能

1,登录用户后,点击查看用户信息页面

2,点击查看积分明细页面

3,点击修改用户页面

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

Django实战项目-学习任务系统-用户管理的更多相关文章

  1. Linux学习之用户管理命令与用户组管理命令(十五)

    Linux学习之用户管理命令与用户组管理命令 目录 用户管理命令 用户添加命令useradd 修改用户密码passwd 修改用户信息usermod 修改用户密码状态chage 删除用户userdel ...

  2. Linux实战教学笔记14:用户管理初级(下)

    第十四节 用户管理初级(下) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,用户查询相关命令id,finger,users,w,who,last,lastlog,gr ...

  3. Linux实战教学笔记14:用户管理初级(上)

    第十四节 用户管理初级(上) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,账号管理 1.1 管理用户命令汇总 命令 注释说明(特殊颜色的必须掌握) useradd增 ...

  4. Linux实战教学笔记15:用户管理初级(下)

    第十四节 用户管理初级(下) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,用户查询相关命令id,finger,users,w,who,last,lastlog,gr ...

  5. [Django实战] 第3篇 - 用户认证(初始配置)

    当大家打开一个网站时,第一步做什么?大部分一定是先登录吧,所以我们就从用户认证开始. 打开用户认证 Django本身已经提供了用户认证模块,使用它可以大大简化用户认证模块的开发,默认情况下,用户认证模 ...

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

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

  7. MySQL学习之用户管理

    用户权限管理 用户权限管理:在不同的项目中给不同的角色(开发者)不同的操作权限,为了保证数据库数据的安全. 简单点说:有的用户可以访问并修改这个数据,而有些用户只能去查看数据,而不能修改数据.就如同博 ...

  8. linux 学习7 用户管理相关文件 r

    7.1.用户配置文件 7.2.用户管理相关文件 7.3.用户管理命令 7.4.用户组管理命令 删除用户userdel [root@localhost ~]# userdel [-r] 用户名 //一定 ...

  9. linux学习之用户管理

    用户管理是在root用户下进行相关操作的 1.配置文件路径:         保存用户信息的文件:/etc/passwd         保存密码的文件:/etc/shadow         保存用 ...

  10. oracle 学习笔记--用户管理

    oracle 用户管理 创建用户(需要具有dba权限的用户) create user 用户名 identified by 密码 defaule tablespace users     //默认表空间 ...

随机推荐

  1. Qt编写安防视频监控系统60-子模块4云台控制

    一.前言 云台控制是一个很老很基础的模块了,视频监控系统中必备的特殊模块之一,可以对选中的通道的摄像机(ONVIF协议),进行云台控制,可以控制球机的上下左右等各个方位的移动,还可以调节变倍步长,至于 ...

  2. Web网页端IM产品RainbowChat-Web的v5.0版已发布

    一.关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIM ...

  3. 百度高效研发实战训练营-Step3

    .# 百度高效研发实战训练营-Step3 3.1 质量意识 关于本部分,将从以下几点进行介绍: 3.1.1 质量的基本概念 意识的树立,源于认识的提高. 首先介绍质量的基本概念,主要包括以下内容: 1 ...

  4. SQL优化——深分页&排序

    问题背景 在开发 Web 应用或处理数据库查询时,分页是一项常见需求.然而,当面对深度分页(即页码较大,偏移量较高的分页情况)时,性能问题往往接踵而至.比如对一些需要拉特定的页面查询.范围导出.范围计 ...

  5. Linux下获取文件名

    linux 下一切皆文件 1.获取指定路径下文件或目录 ls -la /usr/local/ |grep xxx | head -n 1 |awk '{print$9}'xxx : 替换为要匹配的文件 ...

  6. 单片机的主程序中为什么都要加一个while(1)?

    *** * C51 为什么都要加一个while(1)?****** while(1)的作用: while(1) 是一个死循环 为了不让代码继续向下执行. 单片机中使用while(1),大部分:为了防止 ...

  7. 第一章 dubbo源码解析目录

    重要的网址: dubbo的github:https://github.com/alibaba/dubbo dubbo官网:http://dubbo.io/ dubbo使用者手册:https://dub ...

  8. SSH 框架的搭建

    Structs1+spring+Hibernate Structs  相当于mvc设计模式中V.C,即jsp页面和Servlet: spring 管理业务逻辑,即Service: Hibernate ...

  9. EXCEL VSTO插件开发(一)-FuTools Excel

    Excel VSTO插件开发之旅:我与FuTools Excel的共同成长在踏入Excel VSTO插件开发的领域之前,我不过是一名普通的Excel用户,对数据的处理和分析充满好奇却时常感到力不从心. ...

  10. react中类似vue的插槽this.props.children的用法

    父组件 <TestHanderClick bg="blue"> <p> 如果我要显示的话,父组件是双标签,子组件中有this.props.children& ...