2-Django项目进阶--继续学生管理系统

目录

项目框架:

urls.py

views.py

modules.py

class_data.html

add_and_modify.html

add_stu.html

笔记:

继承语法

模板继承总结:

班级添加

add_and_modify.html

修改添加公用一个页面即可

views.py

班级修改

views.py

url.py

班级删除

views.py

学员信息

学员展示

注意:两张表在同一个页面展示,路由只能用一个

choices:get_字段名_display(),获取对应的值,在html当中,不写括号

班级:外检关联,通过data找到外键字段,然后找表当中的字段

学员信息添加

add_stu.html


项目框架:


urls.py

--路由映射


views.py

--app的视图函数

from django.shortcuts import render,redirect
from demo_one import models# Create your views here.
def index(request):return render(request, "index/index.html")# 展示班级以及学员
def class_data(request):data_list = models.Grade.objects.all()data_stu_list = models.Student.objects.all()# for data in data_stu_list:# print(data.get_gender_display())content = {"data_list": data_list,"data_stu_list": data_stu_list}return render(request, "class_data/class_data.html", content)def add_data(request):if request.method == "GET":title = "添加信息"return render(request, "class_data/add_and_modify.html",{"title":title})grade = request.POST.get("grade")models.Grade.objects.create(grade=grade)return redirect("/class/data/")# 删除班级
def del_data(request):nid = request.GET.get("nid")models.Grade.objects.filter(id=nid).delete()return redirect("/class/data/")# 修改班级信息
def modify_data(request, nid):if request.method == "GET":title = "修改信息"grade = models.Grade.objects.filter(id=nid).first()return render(request, "class_data/add_and_modify.html", {"title":title, "grade": grade})# 根据输入框的name值,获取输入框输入的内容grade = request.POST.get("grade")models.Grade.objects.filter(id=nid).update(grade=grade)return redirect("/class/data/")# 学生信息展示,使用class_data# 添加学员信息
def add_stu(request):if request.method == "GET":content = {"gender_choice": models.Student.gender_choice,"grade_list": models.Grade.objects.all()}return render(request, "stu_data/add_stu.html",content)name = request.POST.get("name")age = request.POST.get("age")gender = request.POST.get("gender")tel = request.POST.get("tel")stu_id = request.POST.get("stu_id")class_ = request.POST.get("class_")class_time = request.POST.get("class_time")print(name, gender, class_)models.Student.objects.create(name=name, age=age, gender=gender,tel=tel,stu_id=stu_id,stu_grade_id=class_,class_time=class_time)return redirect("/class/data/")

modules.py

--数据库的字段

from django.db import models# Create your models here.class Grade(models.Model):grade = models.CharField(verbose_name="年级班级", max_length=12)# class_ = models.CharField(verbose_name="班级", max_length=12)class Student(models.Model):name = models.CharField(verbose_name="姓名", max_length=64)age = models.IntegerField(verbose_name="年龄")gender_choice = ((1, "男"),(2, "女"))gender = models.SmallIntegerField(verbose_name="性别", choices=gender_choice)tel = models.IntegerField(verbose_name="电话")stu_id = models.IntegerField(verbose_name="学号")class_time = models.DateField(verbose_name="报名时间",null=True,blank=True)# 外键约束stu_grade = models.ForeignKey(to="Grade", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)


class_data.html

{% extends 'index/index.html' %}
{% load static %}{% block content %}<div class="container">{# 班级表 #}<div class="col-xs-3"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/add/data/"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>添加信息</a></div><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">班级表</h3></div><div class="panel-body"><table class="table"><thead><tr><th>id</th><th>班级</th><th>操作</th></tr></thead><tbody>{% for data in data_list %}<tr><th>{{ data.id }}</th><td>{{ data.grade }}</td><td><a href="/modify/{{ data.id }}/data/"><span style="color: green" class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a><a href="/del/data?nid={{ data.id }}"><span style="color: red" class="glyphicon glyphicon-trash" aria-hidden="true"></span></a></td></tr>{% endfor %}</tbody></table></div></div></div>{# 学员表 #}<div class="col-xs-9"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/add/stu/"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>添加学员</a></div><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">学生表</h3></div><div class="panel-body"><table class="table"><thead><tr><th>id</th><th>姓名</th><th>年纪</th><th>性别</th><th>电话</th><th>学号</th><th>班级</th><th>报名时间</th><th>操作</th></tr></thead><tbody>{% for data in data_stu_list %}<tr><th>{{ data.id }}</th><td>{{ data.name }}</td><td>{{ data.age }}</td><td>{{ data.get_gender_display }}</td><td>{{ data.tel }}</td><td>{{ data.stu_id }}</td><td>{{ data.stu_grade.grade }}</td><td>{{ data.class_time }}</td><td><a href="#"><span style="color: green" class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a><a href="#"><span style="color: red" class="glyphicon glyphicon-trash" aria-hidden="true"></span></a></td></tr>{% endfor %}</tbody></table></div></div></div></div>
{% endblock %}

add_and_modify.html

{% extends 'index/index.html' %}{% block content %}<div class="container"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">{{ title }}</label><input type="text" class="form-control" placeholder="{{ grade.grade }}" name="grade"><button type="submit" class="btn btn-success">提交</button></div></form></div>
{% endblock %}

add_stu.html

{% extends "index/index.html" %}
{% load static %}{% block css %}<link rel="stylesheet" href="{% static 'css/layui.css' %}">
{% endblock %}{% block content %}<div class="container"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">添加姓名</label><input type="text" class="form-control" name="name"><label for="exampleInputEmail1">添加年纪</label><input type="text" class="form-control" name="age"><label for="exampleInputEmail1">添加性别</label><select type="text" class="form-control" name="gender">{% for item in gender_choice %}<option value="{{ item.0 }}">{{ item.1 }}</option>{% endfor %}</select><label for="exampleInputEmail1">添加电话</label><input type="text" class="form-control" name="tel"><label for="exampleInputEmail1">添加学号</label><input type="text" class="form-control" name="stu_id"><label for="exampleInputEmail1">添加班级</label><select type="text" class="form-control" name="class_">{% for item in grade_list %}<option value="{{ item.id }}">{{ item.grade }}</option>{% endfor %}</select><label for="exampleInputEmail1">添加时间</label><input id="ID-laydate-demo" type="text" class="form-control" name="class_time"><button type="submit" class="btn btn-success">提交</button></div></form></div>
{% endblock %}{% block js %}<script src="{% static 'js/layui.js' %}"></script><script>layui.use(function () {var laydate = layui.laydate;// 渲染laydate.render({elem: '#ID-laydate-demo'});});</script>
{% endblock %}

笔记:

  • 继承语法

    {% extends 'index/index.html' %}
    相当与将index.html页面上的信息全部复制过来
    ​
    模板当中占位
    {% block content %} 
    {% endblock %}
    ​
    其他文件当中
    {% block content %} 新的内容
    {% endblock %}
    ​

模板继承总结:

1、继承页面,相当于复制所有的代码(包括引入的css,js等)

2、继承页面之后,如果需要增加新的内容,需要在模板当中添加block{占位}

  * #### class_data.html~~~html{% extends 'index/index.html' %}添加新的css{% block css %}<style>h1 {color: red;}</style>{% endblock %}添加内容{% block content %}<div class="container"><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">班级表</h3></div><div class="panel-body"><table class="table"><caption>Optional table caption.</caption><thead><tr><th>#</th><th>First Name</th><th>Last Name</th><th>Username</th></tr></thead><tbody><tr><th scope="row">1</th><td>Mark</td><td>Otto</td><td>@mdo</td></tr><tr><th scope="row">2</th><td>Jacob</td><td>Thornton</td><td>@fat</td></tr><tr><th scope="row">3</th><td>Larry</td><td>the Bird</td><td>@twitter</td></tr></tbody></table></div></div></div>{% endblock %}添加新的js代码{% block js %}{% endblock %}
  • 班级添加

  • add_and_modify.html

  • 修改添加公用一个页面即可
    {% extends 'index/index.html' %}
    ​
    {% block content %}<div class="container"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">{{ title }}</label><input type="text" class="form-control" placeholder="{{ grade.grade }}" name="grade"><button type="submit" class="btn btn-success">提交</button></div></form></div>
    {% endblock %}
  • views.py
    def add_data(request):if request.method == "GET":return render(request, "class_data/add_data.html")
    ​grade = request.POST.get("grade")models.Grade.objects.create(grade=grade)return redirect("/class/data/")

班级修改

  • views.py
    # 修改班级信息
    def modify_data(request, nid):if request.method == "GET":title = "修改信息"grade = models.Grade.objects.filter(id=nid).first()return render(request, "class_data/add_and_modify.html", {"title":title, "grade": grade})# 根据输入框的name值,获取输入框输入的内容grade = request.POST.get("grade")models.Grade.objects.filter(id=nid).update(grade=grade)return redirect("/class/data/")
  • url.py
     path('modify/<int:nid>/data/', views.modify_data),

班级删除

  • views.py
    # 删除班级
    def del_data(request):nid = request.GET.get("nid")models.Grade.objects.filter(id=nid).delete()return redirect("/class/data/")

学员信息

学员展示

  • 注意:两张表在同一个页面展示,路由只能用一个

  • choices:get_字段名_display(),获取对应的值,在html当中,不写括号

  • 班级:外检关联,通过data找到外键字段,然后找表当中的字段

学员信息添加

  • add_stu.html
    {% extends "index/index.html" %}
    ​
    {% block content %}<div class="container"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">添加姓名</label><input type="text" class="form-control" name="name">
    ​<label for="exampleInputEmail1">添加年纪</label><input type="text" class="form-control" name="age">
    ​<label for="exampleInputEmail1">添加性别</label><select type="text" class="form-control" name="gender">{% for item in gender_choice %}<option value="{{ item.0 }}">{{ item.1 }}</option>{% endfor %}</select>
    ​<label for="exampleInputEmail1">添加电话</label><input type="text" class="form-control" name="tel">
    ​<label for="exampleInputEmail1">添加学号</label><input type="text" class="form-control" name="stu_id">
    ​<label for="exampleInputEmail1">添加班级</label><select type="text" class="form-control" name="class_">{% for item in grade_list %}<option value="{{ item.id }}">{{ item.grade }}</option>{% endfor %}</select>
    ​<label for="exampleInputEmail1">添加时间</label><input type="text" class="form-control" name="class_time">
    ​<button type="submit" class="btn btn-success">提交</button></div></form></div>
    {% endblock %}

    性别:gender_choice 元组类型:通过遍历,拿到数字以及对应的男女

    班级:grade_list 班级信息在另一张表里面,所以接受另一张表的grade


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18269.shtml

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

相关文章

boost asio异步服务器(2)实现伪闭包延长连接生命周期

闭包 在函数内部实现一个子函数&#xff0c;子函数的作用域内能访问外部函数的局部变量。闭包就是能够读取其他函数内部变量。但是由于闭包会使得函数中的变量都被保存在内存中&#xff0c;内存消耗很大&#xff0c;所以不能滥用闭包&#xff0c;否则会造成程的性能问题&#x…

构造器--5.28

不用一个个属性赋值的方法&#xff1a; 知道了类的创建与使用&#xff0c;但是每次赋值都是一个个调用&#xff0c;我们可以用构造器使得方法简单一点&#xff0c;不用一个个调用属性赋值&#xff0c;直接传参就OK了&#xff1b; 点击类名然后ctrl可以查看构造器 public yanxi…

C++完成特色旅游管理信息系统

背景&#xff1a; 继C完成淄博烧烤节管理系统后&#xff0c;我们来到了特色旅游管理信息系统的代码编写&#xff0c;历史链接点下方。 C完成淄博烧烤节管理系统_淄博烧烤总账管理系统的-CSDN博客 问题描述&#xff1a; 为了更好的管理各个服务小组&#xff0c;开发相应的管…

民国漫画杂志《时代漫画》第30期.PDF

时代漫画30.PDF: https://url03.ctfile.com/f/1779803-1248635414-87c8c8?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

webpack打包配置项

webpack打包配置项 在config.js 中 module.exports {publicPath: process.env.NODE_ENV production ? / : /, //静态资源目录outputDir: dist, //打包名称assetsDir: static,//静态资源&#xff0c;目录devServer: {port: port,open: false,overlay: {warnings: false,erro…

SpringBoot自动装配源码

自动装配&#xff1a; 实际上就是如何将Bean自动化装载到IOC容器中管理&#xff0c;Springboot 的自动装配时通过SPI 的方式来实现的 SPI&#xff1a;SpringBoot 定义的一套接口规范&#xff0c;这套规范规定&#xff1a;Springboot 在启动时会扫描外部引用 jar 包中的META-IN…

css 渐变色边框

效果图&#xff1a; 代码&#xff1a; <style>:root{--br-radius: 12px;}.list{position: relative;}.list_tle{margin-top: 15px;margin-bottom: 5px;}.item{position: relative;display: inline-flex;} .br1 {padding: 10px 16px;clip-path: inset(0 round 6px);borde…

官宣|HelpLook现已入驻钉钉应用市场,助力企业知识管理知识

前一阵子OpenAI公司最新的GPT-4o技术震撼发布&#xff0c;人工智能的实际应用前景再次引起行业瞩目&#xff0c;或者被GPT4o的数据分析等特色功能折服。如您正寻求将AI技术融入企业知识管理&#xff0c;不要错过HelpLook&#xff01;HelpLook AI知识库已经正式入驻钉钉应用市场…

基于Android的家庭理财APP的设计与实现(论文+源码)_kaic

摘 要 随着我国居民收入和生活水平的提高&#xff0c;家庭理财成为人们热议的焦点问题。在需求分析阶段&#xff0c;系统从用户的实际需求出发&#xff0c;确定了用户账户管理、记账、数据分析和提醒功能等几个核心需求。用户账户管理包括用户注册、登录和密码找回等基本操作…

大数据技术Hbase列数据库——topic1

目录 搭建单机版Hbase验证方法一验证方法二 搭建单机版Hbase 验证方法一 使用 jps 命令查看 HMaster 进程是否启动 首先使用xftp 7上传hbase-2.1.0安装压缩包到虚拟机进行解压缩到某一地址&#xff0c;这里解压缩到了上传的路径即/root/software/ tar -zxvf hbase-2.1.0-bi…

2025第十届美陈展

展位又遭疯抢&#xff01;2025第十届美陈展释放“无界之美” 美是全球通用的语言&#xff0c;人类对美的追求始终如一&#xff0c;大众审美在经历了时代的变迁后开始趋同&#xff0c;东方文明深处的美学经济开始崛起。 在如今商业迈入存量阶段&#xff0c;以品牌为突破口打造…

基于 vuestic-ui 实战教程 - 登录篇

1. 简介 登录做为一个系统的门面&#xff0c;也是阻挡外界的一道防线&#xff0c;那在vuestic-ui中如何做登录功能呢。在这里就之间沿用初始版本的Login页面&#xff0c;作为一个演示模板&#xff0c;后续需要改进的读者可以在此篇文章的基础上修改。 2. 登录接口相关api 与 t…

python连接mysql,并整理(去哪儿网)页面数据到表

##引入requests/pymysql模块 本地安装mysql数据库&#xff0c;安装图形化工具navicat import requests from pymysql import Connect#创建客户端连接信息 client Connect(host127.0.0.1,port3306,userroot,password, ) #创建游标 cursor client.cursor() cursor.execute(cre…

17- PHP 开发-个人博客项目TP 框架路由访问安全写法历史漏 洞

常见的php框架&#xff1a;laravel和thinkphp和yii 这里以thinkphp为例 thinkphp目录访问设置 这里只找到了这个3.多的源代码&#xff0c;没找点5.的&#xff0c;凑合一下 链接&#xff1a;GitHub - top-think/thinkphp: ThinkPHP3.2 ——基于PHP5的简单快速的面向对象的PHP…

HTML用法介绍

文章目录 一、HTML概念和模版二、常用标签及用法1.p标签2.span标签3.h标签4.hr标签5.img标签6.a标签7.input标签8.table标签 一、HTML概念和模版 HTML的全称为超文本标记语言&#xff0c;它包括一系列标签组成&#xff0c;模版及各部分注释如下&#xff1a; <!--声明文档类…

ROS基础学习-话题通信机制研究

研究ROS通信机制 研究ROS通信机制 0.前言1.话题通信1.1 理论模型1.2 话题通讯的基本操作1.2.1 C++1.2.2 Python中使用自己的虚拟环境包1.2.2.1 参考11.2.2.2 参考21.2.2.3 /usr/bin/env:“python”:没有那个文件或目录1.2.3 Python1.2.2.1 发布方1.2.2.2 订阅方1.2.2.3 添加可执…

《征服数据结构》目录

我们知道要想学好算法&#xff0c;必须熟练掌握数据结构&#xff0c;数据结构常见的有 8 大类&#xff0c;分别是数组&#xff0c;链表&#xff0c;队列&#xff0c;栈&#xff0c;散列表&#xff0c;树&#xff0c;堆&#xff0c;图。但如果细分的话就比较多了&#xff0c;比如…

go-zero 实战(2)

go-zero 实战&#xff08;1&#xff09; 中&#xff0c;使用了go-zero 创建了order 和 user 两个微服务。而order作为grpc的客户端&#xff0c;user 作为grpc的服务端&#xff0c;打通了 order 到 user的调用。接下来&#xff0c;我们在user中&#xff0c;加入mysql组件。确保数…

我说同事咋找工作命中率这么高,原来是学习了这些招式

最近有两个同事离职了&#xff0c;其中一个还是专科&#xff0c;他俩一个是前端开发&#xff0c;一个是python开发&#xff0c;两个人都接近35岁了。我们还劝告他们&#xff0c;不要离职&#xff0c;要骑驴找马。但了解后&#xff0c;他俩非常有信心的说&#xff1a;不怕&#…

3D视觉技术|螺栓分拣测试

随着制造业自动化程度的不断提高&#xff0c;某大型汽配企业为提升生产效率、减少人力成本&#xff0c;提出了使用复合机器人完成螺栓分拣的需求。富唯智能通过采用复合机器人&#xff0c;结合3D工业相机和高性能控制器&#xff0c;实现螺栓的自动抓取&#xff0c;从而提升生产…