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

news2024/9/24 7:14:35

目录

项目框架:

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.coloradmin.cn/o/1701546.html

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

相关文章

牛客热题:寻找第K大

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;寻找第K大题目链接方法一&#…

面试官:讲讲为什么SpringBoot的 jar 可以直接运行?

Spring Boot 是一个用于简化 Spring 应用程序开发的框架&#xff0c;它通过约定优于配置和大量的自动化配置&#xff0c;使得开发者可以更轻松地创建和部署 Spring 应用程序。一个特别引人注目的特性是 Spring Boot 应用可以打包成一个可执行的 JAR 文件&#xff0c;并且可以直…

基于图鸟UI的圈子商圈:一个全栈前端模板的探索与应用

摘要&#xff1a; 本文介绍了一个基于图鸟UI的纯前端模板——圈子商圈&#xff0c;它支持微信小程序、APP和H5等多平台开发。该模板不仅包含丰富的UI组件和页面模板&#xff0c;还提供了详尽的使用文档&#xff0c;旨在帮助开发者快速构建出酷炫且功能齐全的前端应用。本文将从…

51-54 Sora能制作动作大片还需要一段时间 | DrivingGaussian:周围动态自动驾驶场景的复合高斯飞溅

24年3月&#xff0c;北大、谷歌和加州大学共同发布了DrivingGaussian: Composite Gaussian Splatting for Surrounding Dynamic Autonomous Driving Scenes。视图合成和可控模拟可以生成自动驾驶的极端场景Corner Case&#xff0c;这些安全关键情况有助于以更低成本验证和增强自…

第14章-蓝牙遥控小车 手把手做蓝牙APP遥控小车 蓝牙串口通讯讲解

本文讲解手机蓝牙如何遥控小车&#xff0c;如何编写串口通信指令 第14章-手机遥控功能 我们要实现蓝牙遥控功能&#xff0c;蓝牙遥控功能要使用:1.单片机的串口、2.蓝牙通信模块 所以我们先调试好:单片机的串口->蓝牙模块->接到一起联调 14.1-电脑控制小车 完成功能…

乐游巴蜀,V你而来!苏州金龙海格新V系很“巴适”

成都&#xff0c;自古有“天府之国”之美誉&#xff0c;古老的城市人文与现代的摩登活力相交相融&#xff0c;加之令人垂涎的美食文化&#xff0c;共同造就了这里超强的旅游吸引力。2024年5月23日&#xff0c;以“用心前行&#xff0c;V你而来”为题的苏州金龙新V系客车推介会走…

摸鱼大数据——Hive表操作——基本操作

Hive表操作 Hive乱码解决 1、乱码现象 create database test1 comment "乱码测试"; use test1; CREATE TABLE orders ( orderId bigint COMMENT 订单id, orderNo string COMMENT 订单编号, shopId bigint COMMENT 门店id ); 2、处理步骤 注意&#…

关于研发过程中的代码版本控制的思考

文章目录 前言一、研发&#xff08;1&#xff09;分支管理&#xff08;2&#xff09;代码提交规范&#xff08;3&#xff09;版本号控制 二、测试&#xff08;1&#xff09;研发自测与用例评审研发自测测试人员测试 &#xff08;2&#xff09;BUG反馈与复测&#xff08;3&#…

HQL面试题练习 —— 合并数据

题目来源&#xff1a;京东 目录 1 题目2 建表语句3 题解 1 题目 已知有数据 A 如下&#xff0c;请分别根据 A 生成 B 和 C。 数据A ------------ | id | name | ------------ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa…

【软件设计师】程序语言

1.程序设计语言基本概念 1.1 低级语言与高级语言 低级语言&#xff1a;机器语言和汇编语言称为低级语言 机器语言指0.&#xff0c;1组成的机器指令序列 汇编语言指用符号表示指令的语言&#xff0c;如MOV AX&#xff0c;2 高级语言&#xff1a;从人类的逻辑角度出发&#xff0…

WebGL在医学成像方面的应用

WebGL&#xff08;Web Graphics Library&#xff09;是一种用于在Web浏览器中呈现3D和2D图形的JavaScript API。它被广泛应用于各种领域&#xff0c;包括医学成像。以下是WebGL在医学成像方面的应用及其详细描述。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

蓝牙----wireshark抓包查看蓝牙通信过程

一.完整过程 二.过程详细分析 1.广播数据----可连接的无定向广播包&#xff1a;ADV_IND 2.广播数据----主动扫描&#xff1a;扫描请求&#xff08;SCAN_REQ&#xff09; 扫描相应&#xff08;SCAN_RSP&#xff09;3.被动扫描数据发送连接请求 4.蓝牙配对&#xff08;没有用到…

香橙派 AIpro开发板:开启AI视觉的无限可能

前言 在当今这个由数据和智能驱动的时代&#xff0c; 人工智能&#xff08;AI&#xff09; 已经成为推动技术创新和实现自动化的关键。 特别是在计算机视觉领域&#xff0c;AI的潜能被无限放大&#xff0c;它使得机器能够“看见”并理解视觉世界&#xff0c;从而执行复杂的任务…

企业内部通讯软件—WorkPlus适配信创即时通讯软件

在现代企业中&#xff0c;良好的内部通讯是保持高效工作和顺利运营的关键。企业内部通讯软件的选择对于提升沟通效率、促进团队合作、保障数据安全和隐私保护至关重要。本文将介绍企业内部通讯软件的重要性探讨一些常用的软件&#xff0c;帮助企业做出明智的选择。 一、企业内…

Java面试八股之synchronized关键字的作用

synchronized关键字的作用 同步与线程安全&#xff1a;synchronized是Java中的一个关键字&#xff0c;用于提供一种同步机制&#xff0c;确保线程安全。它通过在多线程环境中控制对共享资源的访问&#xff0c;防止数据的不一致性问题。 修饰代码块&#xff1a;当synchronized…

cuda 11.6 pytorch安装

在安装之前&#xff0c;需要先配置GPU环境&#xff08;安装CUDA和CudaNN) 命令行输入nvidia-smi&#xff0c;查看驱动信息 nvidia-smi 安装相应的CUDA 和CUDANN 验证&#xff1a;输入nvcc --version 或者nvcc -V 进行检查 nvcc --version nvcc -V 在anaconda里创建环境 co…

区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测

区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测 目录 区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-KDE卷积神经网络结合…

武汉网红餐馆火灾背后的安全警示:可燃气体报警器需定期校准

在餐饮业快速发展的今天&#xff0c;安全问题一直是行业内外关注的重点。 最近&#xff0c;武汉一家网红餐馆在就餐高峰期突发火灾&#xff0c;事件迅速成为公众关注的焦点。这一事故不仅给餐馆带来了重大损失&#xff0c;也引发了对于餐馆安全管理的深思。 尤其是可燃气体报…

Unity学习日志

目录 获取相机可视范围的世界坐标(2D) 视口转世界坐标和屏幕转世界坐标的区别: 屏幕转世界坐标 视口转屏幕坐标 视口转屏幕结合3D数学实现可视范围的怪物生成 transform.up游戏对象的方向问题 其实还有一种不用Translate的写法: 修改 transform.up 的行为和影响 C#抽象…