Django 小实例S1 简易学生选课管理系统 7 修改个人信息
Django 小实例S1 简易学生选课管理系统 第7节——修改个人信息
点击查看教程总目录
作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师。
用户模块除了注册登录之外,还需要能够修改个人的信息。
1 表单选择
一般来说,修改视图和注册视图可以用一样的表单。
具体到这个教务管理系统,有一个业务逻辑为:
学生注册信息可以选择年级,但是修改个人信息不能修改年级。
所以学生信息修改的表单需要修改下(在user/forms.py中添加如下代码)
class StuUpdateForm(StuRegisterForm):
class Meta:
model = Student
fields = ('name',
'password',
'confirm_password',
'gender',
'birthday',
'email',
'info')
老师信息修改的表单可以使用原来注册表单,即TeaRegisterForm
2 模板文件
明确了表单后,则可以添加对应模板文件
templates/user/update.html如下
<!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
<meta charset="UTF-8">
<title>
Register
</title>
<link href="{% static 'css/register.css' %}" rel="stylesheet">
</head>
<body>
<div class="register-container">
<div class="register-title">修改个人信息</div>
<form method="post" class="form">
{% csrf_token %}
{{form.as_p}}
<p><input type="submit" value="修改" class="submit-button"/></p>
</form>
<div class="return-button"><a href="{% url 'course' kind %}">返回上一页</a></div>
</div>
</body>
3 添加视图
首先,在视图user/cbvs.py开头,添加导入需要的库和类
from django.views.generic import UpdateView
from user.forms import StuUpdateForm
再在最后添加如下代码
class UpdateStudentView(UpdateView):
model = Student
form_class = StuUpdateForm
template_name = "user/update.html"
def get_context_data(self, **kwargs):
context = super(UpdateStudentView, self).get_context_data(**kwargs)
context.update(kwargs)
context["kind"] = "student"
return context
def get_success_url(self):
return reverse("course", kwargs={"kind": "student"})
class UpdateTeacherView(UpdateView):
model = Teacher
form_class = TeaRegisterForm
template_name = "user/update.html"
def get_context_data(self, **kwargs):
context = super(UpdateTeacherView, self).get_context_data(**kwargs)
context.update(kwargs)
context["kind"] = "teacher"
return context
def get_success_url(self):
return reverse("course", kwargs={"kind": "teacher"})
在视图user/views.py开头,添加导入上面两个视图类UpdateStudentView, UpdateTeacherView
再在最后添加如下代码
def update(request, kind):
func = None
if kind == "student":
func = UpdateStudentView.as_view()
elif kind == "teacher":
func = UpdateTeacherView.as_view()
else:
return HttpResponse(INVALID_KIND)
pk = request.session.get("id")
if pk:
context = {
"name": request.session.get("name", ""),
"kind": request.session.get("kind", "")
}
return func(request, pk=pk, context=context)
return redirect("login")
4 添加路由
添加对应路由(在user/urls.py中的urlpatterns的添加)
path('update/<slug:kind>', views.update, name="update"),
同时再去个人主页中去添加对应的链接,使得用户可以在个人主页点击它进入信息修改页面。
这里把这个链接添加在个人主页的用户名这里,
同时出于简介美观的目的,用户名只展示一个姓(后面会给这个姓添加一个圆背景)。
修改templates/course/nav.html的第29行
修改前为
{{ info.name }}
修改后为
<a href="{% url 'update' info.kind %}">
{{ info.name.0 }}
</a>
然后运行项目,进入个人主页后,点击用户名,可进入信息修改页面,效果如下:

Django 小实例S1 简易学生选课管理系统 7 修改个人信息的更多相关文章
- Django 小实例S1 简易学生选课管理系统 12 CSS样式完善
Django 小实例S1 简易学生选课管理系统 第12节--CSS样式完善 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块的逻辑代码到这里 ...
- Django 小实例S1 简易学生选课管理系统 11 学生课程业务实现
Django 小实例S1 简易学生选课管理系统 第11节--学生课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,学生需要拥 ...
- Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现
Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...
- Django 小实例S1 简易学生选课管理系统 9 创建课程模型(model)
Django 小实例S1 简易学生选课管理系统 第9节--创建课程模型(model) 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 对于课程模块, ...
- Django 小实例S1 简易学生选课管理系统 8 CSS样式优化
Django 小实例S1 简易学生选课管理系统 第8节--CSS样式优化 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 前面的几节下来,用户模块基 ...
- Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑
Django 小实例S1 简易学生选课管理系统 第6节--实现登录逻辑 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 业务逻辑 本教程第四节里 ...
- Django 小实例S1 简易学生选课管理系统 2 新建项目(project)并进行设置
Django 小实例S1 简易学生选课管理系统 第2节--新建项目(project)并进行设置 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 0 ...
- Django 小实例S1 简易学生选课管理系统 3 创建用户模型(model)
Django 小实例S1 简易学生选课管理系统 第3节--创建用户模型(model) 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新 ...
- Django 小实例S1 简易学生选课管理系统 4 实现登录页面
Django 小实例S1 简易学生选课管理系统 第4节--实现登录页面 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新的额外知识点: ...
随机推荐
- Kettle启动时报错Cannot create java virtual machine & A java exception has occurred
开源免费--最喜欢的四个字没有之一 1.官网下载 https://sourceforge.net/projects/pentaho/files/Data%20Integration/ 下载完后,解压即 ...
- 好久没发文了,一篇Vue3的Composition API使用奉上
Composition API Composition API是Vue3中推荐的组件代码书写方式,相较于传统的Options API来说,它能让业务逻辑处理和后期代码维护变的更加简单. 首先我们来看O ...
- Decorator装饰器模式个人理解
对于装饰器模式,其主要是为了:在不改变本体特征的情况下,对其进行包装.装饰,目的是为了补充.扩展.增强其功能. 有三个原则: 不能改变本体的特征 要对本体的功能进行扩展 装饰器脱离了本体则没有任何含义 ...
- Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题
Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题 继实现动态修改请求 Body 以及重试带 Body 的请求之后,我们又遇到了一个小问题.最近很多接口,收到 ...
- VirtualBox设置双网卡实现主宿互访及虚拟机访问互联网总结
1,配置网络 注:VirtualBox要在全局工具-主机网络管理器里新建一个虚拟网卡. 然后虚拟机的网卡1设置为host-only,界面名称为新建的虚拟网卡(我这里为了不跟主机ip冲突,设置成了不同网 ...
- 理解hashMap
首先需要理解几个基本概念: 什么是数据结构?(摘自 java数据结构系列--什么是数据结构 (baidu.com)) 数据结构是计算机组织.存储数据的方式.简单来说就是,数据按指定的规则进行存储,从而 ...
- Go语言核心36讲(Go语言基础知识一)--学习笔记
01 | 工作区和GOPATH 从 Go 1.5 版本的自举(即用 Go 语言编写程序来实现 Go 语言自身),到 Go 1.7 版本的极速 GC(也称垃圾回收器),再到 2018 年 2 月发布的 ...
- Vue3学习(六)之使用Vue3进行数据绑定及显示列表数据
一.写在前面 说来还是比较惭愧的,从周二开始事就比较多,周三还电脑坏了,然后修电脑等等一些杂事,忙的团团转,因为周二.周三自己走的过多了,导致不敢直腰,周四卧床一天. 之前都听说<陈情令> ...
- 谈谈BEM规范(含代码)
css规范之BEM规范 前言 引用一句经典名言在编程的世界里其中一件最难的事情就是命名,不管是设计到编程语言还是标记语言都会有命名的需求.今天聊的就是关于css的命名规范的发展过程以及演变. 命名的发 ...
- [对对子队]会议记录5.18(Scrum Meeting5)
今天已完成的工作 何瑞 工作内容:搭建第8关 相关issue:搭建关卡7.8.9 相关签入:feat:初步搭建了Lv8 吴昭邦 工作内容:搭建第8关 相关issue:搭建关卡7.8 ...