基于Python + Django 开发一款学生管理系统(附源码)

news2024/9/25 5:24:37

文章目录

      • 1.开发环境
      • 源码分享&技术交流
      • 2.项目实战
        • 1)创建`Django`项目
        • 2)创建应用
        • 3)配置MySQL
        • 4)数据模型层创建
        • 5)路由配置
        • 6)增删改查视图函数
        • 7)模板页面创建
        • 8)启动web服务

1.开发环境

开发工具:Pycharm 2020.1.1

开发语言:Python 3.8.5

Web框架:Djanjo 3.0.3

前端框架:bootstrap 3.3.7

数据库:MySQL 8.0.21 + Navicat Premium 15.0.17

操作系统:macOS 10.14.6

源码分享&技术交流

技术要学会分享、交流,不建议闭门造车。 本文技术由粉丝群小伙伴分享汇总。源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:dkl88191,备注:来自CSDN +学管系统
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:学管系统

2.项目实战

1)创建Django项目

  • Pycharm创建Django

  • 目录结构如下

2)创建应用

  • 打开Pycharm的终端,输入如下命令,创建Web应用
python manage.py startapp Web    # Web名字可以任意取  

  • settings.py文件里INSTALLED_APPS下面添加Web完成应用注册

3)配置MySQL

  • 修改settings.py文件中的sqlite3MySQL

DATABASES = {  
    'default': {  
        'ENGINE': 'django.db.backends.mysql',  
        'NAME': 'eleven',  
        'USER': 'root',  
        'Pw': '123456',  
        'HOST': '127.0.0.1',  
        'PORT': 3306  
    }  
}  

4)数据模型层创建

  • 在应用Web下的models.py添加Student模型

class Student(models.Model):  
    student_no = models.CharField(max_length = 32, unique=True)  
    student_name = models.CharField(max_length = 32)  

执行如下命令,在数据库生成表结构

# 生成文件记录模型的变化  
python manage.py makemigrations Web  
# 将模型变化同步至数据库,我们可以在数据库生成对应的表结构  
python manage.py migrate Web  

数据库中生成的表

5)路由配置

el_sms里面的urls.py里面添加Web的路由配置

from django.contrib import admin  
from django.urls import path  
from django.conf.urls import url, include  
  
# 请求路径url和处理方法的映射配置  
urlpatterns = [  
    path('admin/', admin.site.urls),  
    url(r'^Web/', include('Web.urls'))  
]  

然后在Web创建一个urls.py文件,添加路由配置如下:

# coding=utf-8  
from django.conf.urls import url  
from . import views  
  
urlpatterns = [  
 url(r'^$', views.index),  
 url(r'^add/$', views.add),  
 url(r'^edit/$', views.edit),  
 url(r'^delete/$', views.delete)  
]  

6)增删改查视图函数

在应用Web的视图层文件views.py添加对学生信息增删改查的处理函数

import MySQLdb  
from django.shortcuts import render, redirect  
  
# Create your views here.  
  
# 连接MySQL数据库  
conn = MySQLdb.connect(host="localhost", user="root", pw="123456", db="eleven", charset='utf8')  
  
  
# 学生信息列表处理函数  
def index(request):  
    with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:  
        cursor.execute("SELECT id,student_no,student_name FROM Web_student")  
    students = cursor.fetchall()  
    return render(request, 'student/index.html', {'students': students})  
  
  
# 学生信息新增处理函数  
def add(request):  
    if request.method == 'GET':  
        return render(request, 'student/add.html')  
    else:  
        student_no = request.POST.get('student_no', '')  
    student_name = request.POST.get('student_name', '')  
    with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:  
        cursor.execute("INSERT INTO Web_student (student_no,student_name) "  
                       "values (%s,%s)", [student_no, student_name])  
        conn.commit()  
    return redirect('../')  
  
  
# 学生信息修改处理函数  
def edit(request):  
    if request.method == 'GET':  
        id = request.GET.get("id")  
        with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:  
            cursor.execute("SELECT id,student_no,student_name FROM Web_student where id =%s", [id])  
            student = cursor.fetchone()  
        return render(request, 'student/edit.html', {'student': student})  
    else:  
        id = request.POST.get("id")  
        student_no = request.POST.get('student_no', '')  
        student_name = request.POST.get('student_name', '')  
        with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:  
            cursor.execute("UPDATE Web_student set student_no=%s,student_name=%s where id =%s",  
                           [student_no, student_name, id])  
            conn.commit()  
        return redirect('../')  
  
  
# 学生信息删除处理函数  
def delete(request):  
    id = request.GET.get("id")  
    with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:  
        cursor.execute("DELETE FROM Web_student WHERE id =%s", [id])  
    conn.commit()  
    return redirect('../')  

7)模板页面创建

学生信息列表页

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>学生列表</title>  
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"  
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">  
  
    <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css"  
          integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">  
  
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"  
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"  
            crossorigin="anonymous"></script>  
</head>  
<body>  
<div class="container page-header">  
    <div class="container page-body">  
  
        <div class="col-md-9" role="main">  
            <table class="table table-striped">  
                <a class="btn btn-warning" href="../Web/add" role="button">添加</a>  
                <tr>  
                    <th>编号</th>  
                    <th>学号</th>  
                    <th>姓名</th>  
                    <th>操作</th>  
                </tr>  
                {% for student in students %}  
                    <tr>  
                        <td>{{ forloop.counter }}</td>  
                        <td>{{ student.student_no }}</td>  
                        <td>{{ student.student_name }}</td>  
                        <td>  
                            <a class="btn btn-danger" href="../Web/delete?id={{ student.id }}">删除</a>  
                            <a class="btn btn-warning" href="../Web/edit?id={{ student.id }}">修改</a>  
                        </td>  
                    </tr>  
                     {% endfor %}  
            </table>  
        </div>  
    </div>  
</div>  
  
</body>  
</html>  

学生信息新增页

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>学生添加</title>  
   <!-- ⌘⌥L 格式化代码 -->  
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"  
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">  
  
    <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css"  
          integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">  
  
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"  
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"  
            crossorigin="anonymous"></script>  
</head>  
<body>  
<div class="container page-header">  
    <div class="container page-body">  
        <form class="form-horizontal" method="post" action="../add/">  
            {% csrf_token %}  
            <div class="form-group">  
                <label for="inputEmail3" class="col-sm-2 control-label">学号</label>  
                <div class="col-sm-3">  
                    <input type="text" class="form-control" placeholder="请输入学号" name="student_no"/>  
                </div>  
            </div>  
            <div class="form-group">  
                <label for="inputEmail3" class="col-sm-2 control-label">姓名</label>  
                <div class="col-sm-3">  
                    <input type="text" class="form-control" placeholder="请输入姓名" name="student_name"/>  
                </div>  
            </div>  
            <div class="form-group">  
                <div class="col-sm-offset-2 col-sm-10">  
                    <button type="submit" class="btn btn-default">Sign in</button>  
                </div>  
            </div>  
        </form>  
    </div>  
</div>  
  
</body>  
</html>  

学生信息编辑页

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>学生修改</title>  
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"  
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">  
  
    <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css"  
          integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">  
  
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"  
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"  
            crossorigin="anonymous"></script>  
</head>  
<body>  
<div class="container page-header">  
    <div class="container page-body">  
        <form class="form-horizontal" method="post" action="../edit/">  
            {% csrf_token %}  
            <input type="hidden" name="id" value="{{ student.id }}"/>  
            <div class="form-group">  
                <label for="inputEmail3" class="col-sm-2 control-label">学号</label>  
                <div class="col-sm-3">  
                    <input type="text" class="form-control" placeholder="Text input" name="student_no"  
                           value="{{ student.student_no }}"/>  
                </div>  
            </div>  
  
            <div class="form-group">  
                <label for="inputEmail3" class="col-sm-2 control-label">姓名</label>  
                <div class="col-sm-3">  
                    <input type="text" class="form-control" placeholder="Text input" name="student_name"  
                           value="{{ student.student_name }}"/>  
                </div>  
            </div>  
  
            <div class="form-group">  
                <div class="col-sm-offset-2 col-sm-10">  
                    <button type="submit" class="btn btn-default">修改</button>  
                </div>  
            </div>  
  
        </form>  
    </div>  
</div>  
</body>  
</html>  

8)启动web服务

Terminal终端输入以下命令启动web服务

python manage.py runserver  

服务启动后,打开浏览器输入http://127.0.0.1:8000/Web即可进入学生信息管理列表页

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

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

相关文章

最大似然和贝叶斯参数估计

统计生成模型的参数估计 – Maximum Likelihood(ML) 假设参数是某个确定的值&#xff0c;通过使似然度最大求出参数 – Bayesian estimation 假设参数是随机变量&#xff0c;估计参数分布的参数 – 最大似然求出具体的参数&#xff0c;贝叶斯求的是参数的分布 最大似然估计 假…

献给自己技术成长的第三年

年度总结词语&#xff1a;幸运 献给自己技术成长的第三年一、五州一都二、if else量产三、学技术四、用真心五、设计精产六、感恩幸运一、五州一都 1.1-1.12成都、2.23-3.19广州、4.12-7.23苏州、8.12-8.20兰州、8.23-9.20湖州、其余杭州 成都。去年年底出差到成都&#xff0c;…

HTTP_day01

在互联网世界里&#xff0c;HTTP 通常跑在 TCP/IP 协议栈之上&#xff0c;依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外&#xff0c;还有一些协议依赖于 HTTP&#xff0c;例如 WebSocket、HTTPDNS 等。这些协…

【数据结构】冒泡排序、快速排序(递归,非递归)、归并排序(递归,非递归),七大排序比较,

文章目录冒泡排序快速排序归并排序七大排序之间的对比冒泡排序 基本思想&#xff1a;所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾部移动&#xff0c;键值较小…

高性能web网关之Openresty相关基础知识

高性能web网关之Openresty一、Openresty 简介二、Openresty 应用场景三、lua-nginx-module3.1、Lua 模块指令顺序3.2、Lua嵌入nginx四、责任链五、cosocket后言一、Openresty 简介 openresty 是一个基于 nginx 与 lua 的高性能 web 平台&#xff0c;其内部集成了大量精良的 lu…

148.排序链表

148.排序链表 题目&#xff1a; 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;…

【论文阅读】CVPR2018-深度材料感知跨光谱立体匹配

深度材料感知跨光谱立体匹配 摘要 跨光谱成像对识别和检测任务很有帮助。通常&#xff0c;多个相机用于跨光谱成像&#xff0c;因此需要图像对齐或双目系统中的视差估计。多相机跨光谱系统逐渐被嵌入到有源RGB-D设备中&#xff08;例如Kinect和iPhone X中的RGB-NIR相机&#…

2022 年度回忆

2022 年度回忆 过了今天就是2023年了&#xff0c;记录一下在这一年里发生的点点滴滴吧。 年度总结2022 年度回忆1.石家庄实习2.准备秋招&#xff0c;然后去沈阳实习3.回学校4.来北京实习了总结今年大体且分为四条故事线 1.22年上半年石家庄实习 2.实习结束回家准备秋招&#…

句子表征(各项异性等偏差):PromptBERT: Improving BERT Sentence Embeddings with Prompts

一、核心 句子表征存在不足之处&#xff0c;可能面临各向异性、可能受到词频的影响、可能受到子词、大小写等的影响等等。 Gao et al.(2019)和Wang et al.(2020)指出&#xff0c;对于语言建模&#xff0c;使用最大似然训练通常会产生一个各向异性的词嵌入空间。“各向异性”是…

BabaSSL:支持半同态加密算法 EC-ElGamal

01 背 景 随着大数据与人工智能的快速发展&#xff0c;个人隐私数据泄露和滥用时有发生&#xff0c;隐私安全问题也越来越被重视。 国家于 2020 年施行密码法、2021 年施行个人信息保护法&#xff0c;对个人隐私数据和数据安全加密有更高的要求。 因此&#xff0c;隐私计算也…

2022年博客之路总结

今年是不平凡的一年&#xff0c;IT行业 开卷 的一年&#xff0c;今年大多数人 都 因种种原因 被迫换了工作&#xff0c;再次 先感谢CSDN 这个平台&#xff0c;在这里 给自己了一块可以展示自己才华的空间&#xff0c;通过CSDN平台的各项运营数据&#xff0c;让我有幸 拿到了 更…

flv.js播放flv视频

flv.js是FLV视频播放器&#xff0c;纯JS开发&#xff0c;无需Flash。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…

【虚幻引擎UE】UE5 制作一个元旦烟花短视频的小案例(使用sequence制作视频案例)

祝愿大家元旦快乐&#xff01; 效果预览 一、创建粒子烟花特效 可以使用现成的Niagara烟花粒子特效&#xff0c;直接跳过这一步。 1、 通过Niagara系统创建粒子特效 选择现有发射器素材。 或者也可新建空白特效&#xff0c;将发射器拖入轨道&#xff08;素材包含闪光、拖…

基于TP6+Uni-app框架开发的多端圈子社区论坛小程序H5系统,带数据库和安装教程

正文&#xff1a; 前台uni-app后台tp6开发的多端圈子社区论坛小程序H5系统,带数据库和安装教程。 系统基于TP6Uni-app框架开发&#xff1b;客户移动端采用uni-app开发&#xff0c;管理后台TH6开发。 系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步&#xff0c…

CSDN的2022和2023

前言 今天是2022年12月31日&#xff0c;今年的最后一天&#xff0c;年关已至。 又到了&#xff1a;回头看路&#xff0c;低头赶路&#xff0c;抬头望路的时候。 回顾2022 疫情中的2022 今年应该算是疫情的高峰期吧&#xff0c;各种新冠变异株横行&#xff0c;从严控到一夜…

Day845.Fork/Join -Java 并发编程实战

Fork/Join Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Fork/Join的内容。 线程池、Future、CompletableFuture 和 CompletionService&#xff0c;仔细观察会发现这些工具类都是在帮助站在任务的视角来解决并发问题&#xff0c;而不是让纠缠在线程之间如何协作的…

深度学习:05 卷积神经网络介绍(CNN)

目录 卷积神经网络简介 为什么要用卷积神经网络 网络结构组成 卷积层 卷积计算 卷积核大小 f 边界填充 (p)adding 步长 (s)tride 计算公式 卷积层 激活函数 池化层&#xff08;pooling&#xff09; dropout层 全连接层 卷积神经网络简介 卷积神经网络由一个或多个…

DoIP协议从入门到精通系列——车载网络安全

现代社会慢慢步入数字时代,在这个时代,网络安全已经成为最重要的关注点。自从1980年第一次出现电脑病毒,网络威胁和攻击持续不断,给社会(经济)带来巨大影响。随着汽车的数字化和互联化发展,自然而然会联想到汽车也将为成为黑客攻击的目标。导致的问题除了单纯的不便(攻…

数据结构 | 十大排序超硬核八万字详解【附动图演示、算法复杂度性能分析】

写在前面 2023年的第一篇博客&#xff0c;在这里先祝大家兔年快乐&#x1f430; 本文从学习到搜寻各种资料&#xff0c;整理成博客的形式展现足足花了一个月的时间&#xff0c;慢工出细活&#xff0c;希望本篇文章可以真正带你学懂排序&#xff0c;不再为写排序算法而苦恼 博主…

MQTT协议的工作原理

一、MQTT概述 MQTT由IBM的Andy Stanford-Clark博士和Arcom&#xff08;现为Eurotech&#xff09;的Arlen Nipper于1999年发明。 MQTT 是物联网 &#xff08;IoT&#xff09; 最常用的消息传递协议。MQTT 代表 MQ 遥测传输。该协议是一组规则&#xff0c;用于定义物联网设备如何…