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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式UI开发-lvgl+wsl2+vscode系列:2、label(标签)+button(按钮)+slider(滑块)控件熟悉及其示例demo运行

文章目录 一、前言二、常见控件示例demo模拟环境运行及接口熟悉&#xff08;重要&#xff09;如何修改示例main函数测试各种示例1、label示例1.1、label示例1&#xff08;标签基础示例&#xff09;1.2、label示例2&#xff08;标签带阴影效果&#xff09;1.3、label示例3&#…

Textual for Mac:轻量级IRC客户端

在寻找一款高效、轻量级的IRC客户端时&#xff0c;Textual for Mac无疑是你的不二之选。它集成了众多现代技术&#xff0c;如本机IPv6、最新的IRCv3规范&#xff0c;以及客户端证书身份验证&#xff0c;让你的聊天体验更加顺畅和安全。 Textual for Mac v7.2.2免激活版下载 Tex…

代码随想录算法训练营第五十九天|503.下一个更大元素II、42. 接雨水

503. 下一个更大元素 II 思路&#xff1a; 这道题和739. 每日温度 (opens new window)也几乎如出一辙。 不过&#xff0c;本题要循环数组了。 本篇我侧重与说一说&#xff0c;如何处理循环数组。 相信不少同学看到这道题&#xff0c;就想那我直接把两个数组拼接在一起&…

MySQL导入SQL脚本---超详细介绍

1.新建xxx数据库&#xff0c;字符集选对。 2.在mysql安装目录下cmd进入小黑窗 3.执行mysql -uroot -p123456 --default-character-setutf8命令 4.use xxx; 5.source xxx.sql 执行完上面的命令等待结束就可以了 需要注意的是--default-character-setutf8&#xff0c;要不然可…

如何把学浪的视频保存到手机

你是不是还在为无法将学浪的视频保存到手机而烦恼&#xff1f;别担心&#xff0c;接下来我将为大家分享一个非常实用的方法&#xff0c;让你轻松实现这一目标&#xff01; 下载学浪的工具我已经打包好了&#xff0c;有需要的自己下载一下 学浪下载工具打包链接&#xff1a;百…

网络工程师备考2——vlan

vlan 1、什么是VLAN&#xff1f; VLAN&#xff08;Virtual LAN&#xff09;&#xff0c;翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络&#xff0c;也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域…

DAOS: A Scale-Out High Performance Storage Stack for Storage Class Memory——论文泛读

Supercomputing Frontiers 2020 Paper 分布式元数据论文阅读笔记整理 问题 企业、政府和学术界出现的数据密集型应用程序将现有的I/O模型扩展到了极限。现代I/O工作负载的特点是元数据与未对齐和碎片化数据的结合比例越来越高。传统的存储堆栈为这些工作负载提供了较差的性能…

OrangePi AIPro:次世代嵌入式边缘AI计算与智能机器人应用开发平台

近年来,随着物联网(IoT)和人工智能(AI)技术的快速发展,嵌入式边缘计算板卡在智能设备中的应用越来越广泛。OrangePi AIpro作为一款轻量化高性能的嵌入式边缘人工智能计算SoC,在硬件配置、AI性能和使用便利性方面都有着突出的表现。本文将详细评测OrangePi AIpro的各个方…

项目文章 |NC揭示真菌中A-to-I mRNA编辑机制及其调控和演化

A-to-I mRNA编辑是一种重要的基因表达调控方式&#xff0c;它通过将mRNA中的腺苷(A)转变为肌苷(I)&#xff0c;从而可能改变蛋白质的编码信息。在动物中&#xff0c;这一过程由ADAR家族酶介导&#xff0c;然而在真菌中&#xff0c;由于缺乏ADARs的同源物&#xff0c;其背后的机…

python onnx 推理yolov10

python onnx 推理yolov10 import onnxruntime as ort import cv2 import numpy as np# Class names for the COCO dataset CLASSES = ["person", "bicycle", "car", "motorcycle", "airplane"

[猫头虎分享21天微信小程序基础入门教程]第19天:小程序的插件开发与使用

[猫头虎分享21天微信小程序基础入门教程]第19天&#xff1a;小程序的插件开发与使用 第19天&#xff1a;小程序的插件开发与使用 &#x1f527; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们继续微信小程序的学习&#xff0c;重点了解如…

StackExchange.Redis跑起来,为什么这么溜?

StackExchange.Redis 是一个高性能的 Redis 客户端库&#xff0c;主要用于 .NET 环境下与 Redis 服务器进行通信&#xff0c;大名鼎鼎的stackoverflow 网站就使用它。它使用异步编程模型&#xff0c;能够高效处理大量请求。支持 Redis 的绝大部分功能&#xff0c;包括发布/订阅…

SwiftUI 5.0(iOS 17)进一步定制 TipKit 外观让撸码如虎添翼

概览 在之前 SwiftUI 5.0&#xff08;iOS 17&#xff09;TipKit 让用户更懂你的 App 这篇博文里&#xff0c;我们已经初步介绍过了 TipKit 的基本知识。 现在&#xff0c;让我们来看看如何进一步利用 SwiftUI 对 TipKit 提供的细粒度外观定制技巧&#xff0c;让 Tip 更加“明眸…

灯塔工厂产业数字化平台解决方案(50页PPT)

方案介绍&#xff1a; 随着工业4.0和智能制造的快速发展&#xff0c;传统工厂正面临着转型升级的迫切需求。为了提升生产效率、优化资源配置、增强市场竞争力&#xff0c;我们推出了灯塔工厂产业数字化平台解决方案。该方案旨在通过先进的信息技术手段&#xff0c;将传统工厂转…

springboot发送短信验证码,结合redis 实现限制,验证码有效期2分钟,有效期内禁止再次发送,一天内发送超3次限制

springboot结合redis发送短信验证码,实现限制发送操作 前言(可忽略)实现思路正题效果图示例手机号不符合规则校验图成功发送验证码示例图redis中缓存随机数字验证码&#xff0c;2分钟后失效删除redis缓存图验证码有效期内 返回禁止重复发送图验证码24小时内发送达到3次&#xf…

Https自签名证书

openSSL下载 https://slproweb.com/products/Win32OpenSSL.html 1_整体流程 &#xff08;1&#xff09;https介绍 HTTPS 是 Hypertext Transfer Protocol Secure 的简称&#xff0c;是基于 SSL 加密方式的 HTTP 协议 &#xff08;2&#xff09;CA机构介绍 介绍&#xff1a…

2024年,游戏行业还值得进入吗?

来自知乎问题“2024年&#xff0c;游戏行业还值得进入吗&#xff1f;”的回答。 ——原问题描述&#xff1a;从超小厂执行策划做起&#xff0c;未来有前途吗&#xff1f; 展望2024年&#xff0c;国内外的游戏市场环境或将变得更加复杂&#xff0c;曾经那个水大鱼大的时代过去了…

考试宝典——软件过程与管理重点知识总结

概论 软件工程三要素 过程方法工具 软件过程的定义 软件过程是用于软件开发及维护的一系列活动、方法及实践。 常见软件过程分类&#xff08;五大类&#xff09; 客户-供应商过程&#xff1a;内部直接影响到客户、外部直接影响开发、向客户交付软件以及软件正确操作与使用的过…

路由器交换机直连方案(RM50+RTL8367N)

不经过网口和变压器&#xff0c;实现板级网口扩展。 通过网口&#xff0c;网线连接 板级芯片直接连接&#xff0c;验证OK 激光导航控制板通过路由器上网成功

二叉搜索树BST ——(C++)

本篇将会讲解有关二叉树的搜索原理&#xff0c;以及关于二叉搜索树的建立&#xff0c;以及二叉树搜索树的插入、删除和查找等基本操作。最后我们还会对二叉搜索树进行功能扩展&#xff0c;介绍有关搜索二叉树的 K 模型和 KV 模型。目录如下&#xff1a; 目录 1. 搜索二叉树 二叉…