基于Python+Django+MySQL实现Web版的增删改查
Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web。
开发环境
- 开发工具:Pycharm 2020.1
- 开发语言:Python 3.8.0
- Web框架:Django 3.0.6
- 数据库:MySQL5.7
- 操作系统:Windows 10
项目实战
1. 创建项目
File- New Project- Django
稍等片刻,项目的目录结构如下图
项目创建后确认是否已安装Django和mysqlclient解释器,如何确认?file- Settings
如果没有请在Terminal终端输入以下命令完成安装
代码语言:javascript
复制
pip install django
pip install mysqlclient
如果在执行pip install 报错Read time out请设置延长下超时时间,默认15s,网络不好情况下很易超时
代码语言:javascript
复制
pip --default-timeout=180 install -U django
pip --default-timeout=180 install -U mysqlclient
参数-U是–upgrade简写,把安装的包升级到最新版本
2. 创建应用
打开Pycharm的Terminal终端,输入以下命令创建sims应用
代码语言:javascript
复制
python manage.py startapp sims
应用创建后要在项目的settings.py文件里的INSTALLED_APPS下面添加smis完成应用注册
3.配置MySQL数据库
在本地MySQL创建sms数据库,修改项目的settings连接信息由默认的sqlite修改为MySQL
代码语言:javascript
复制
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'sms','USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1','PORT': 3306}
}
测试连接,依次点击Pycharm右上角的Database- +- Data Source- MySQL
下载连接驱动和配置数据库连接信息
点击Test Connection测试连接,连接通过点击OK出现如下的结构信息表示连接本地MySQL成功
4.数据模型创建(M)
在应用sims下models.py添加Student模型
代码语言:javascript
复制
class Student(models.Model):student_no = models.CharField(max_length=32, unique=True)student_name = models.CharField(max_length=32)
5.数据模型迁移
Terminal终端输入以下两条命令,其作用第一条生成文件记录模型的变化;第二条是将模型变化同步至数据库,我们可以在数据库生成对应的表结构。
代码语言:javascript
复制
python manage.py makemigrations sims
python manage.py migrate sims
生成数据表结构如下所示
6.路由配置
本质可以理解请求路径url和处理方法的映射配置,首先在项目sms的urls.py文件中添加sims的路由配置
代码语言:javascript
复制
from django.contrib import admin
from django.urls import path
from django.conf.urls import url, includeurlpatterns = [path('admin/', admin.site.urls),url(r'^sims/', include('sims.urls'))
]
然后在sims添加一个名为urls.py的文件,添加路由配置如下
代码语言:javascript
复制
# coding=utf-8
from django.conf.urls import url
from . import viewsurlpatterns = [url(r'^$', views.index),url(r'^add/$', views.add),url(r'^edit/$', views.edit),url(r'^delete/$', views.delete)
]
7.处理函数添加(V)
在应用sims的视图层文件views.py添加对应学生信息增删改查的处理函数,这里我使用的原生SQL,便于深入理解其执行过程。后面有时间我会在github上添加Django框架提供的操作数据库方式。
代码语言:javascript
复制
import MySQLdb
from django.shortcuts import render, redirect# Create your views here.
# 学生信息列表处理函数
def index(request):conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="sms", charset='utf8')with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:cursor.execute("SELECT id,student_no,student_name FROM sims_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', '')conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="sms", charset='utf8')with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:cursor.execute("INSERT INTO sims_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")conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="sms", charset='utf8')with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:cursor.execute("SELECT id,student_no,student_name FROM sims_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', '')conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="sms", charset='utf8')with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:cursor.execute("UPDATE sims_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")conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="sms", charset='utf8')with conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:cursor.execute("DELETE FROM sims_student WHERE id =%s", [id])conn.commit()return redirect('../')
8.模板页面创建(T)
学生信息列表页
代码语言:javascript
复制
<!DOCTYPE html
<html lang="en"
<head <meta charset="UTF-8" <title 学生列表</title
</head
<body
<table border="1px" width="100%" style="border-collapse: collapse;" <a href="../sims/add" 添加学生</a <tr <th 编号</th <th 姓名</th <th 学号</th <th 操作</th </tr {% for student in students %}<tr <td align="center" {{ forloop.counter }} </td <td align="center" {{ student.student_name }} </td <td align="center" {{ student.student_no }} </td <td align="center" <a href="../sims/edit/?id={{ student.id }}" 编辑</a <a href="../sims/delete/?id={{ student.id }}" 删除</a </td </tr {% endfor %}
</table
</body
</html
学生信息新增页
代码语言:javascript
复制
<!DOCTYPE html
<html lang="en"
<head <meta charset="UTF-8" <title 学生添加</title <style form {margin: 20px auto;width: 500px;border: 1px solid #ccc;padding: 20px}</style
</head
<body
<form method="post" action="../add/" {% csrf_token %}<table <tr <th 姓名</th <td <input name="student_name" </td </tr <tr <th 学号</th <td <input name="student_no"/ </td </tr <tr <td colspan="2" <input type="submit"/ </td </tr </table
</form
</body
</html
学生信息编辑页
代码语言:javascript
复制
<!DOCTYPE html
<html lang="en"
<head <meta charset="UTF-8" <title 学生编辑</title <style form {margin: 20px auto;width: 500px;border: 1px solid #ccc;padding: 20px}</style
</head
<body
<form method="post" action="../edit/" {% csrf_token %}<input type="hidden" name="id" value="{{ student.id }}"/ <table <tr <th 姓名</th <td <input name="student_name" value="{{ student.student_name }}" </td </tr <tr <th 学号</th <td <input name="student_no" value="{{ student.student_no }}"/ </td </tr <tr <td colspan="2" <input type="submit"/ </td </tr </table
</form
</body
</html
9.启动web服务测试
Terminal终端输入以下命令启动web服务
代码语言:javascript
复制
python manage.py runserver
服务启动后,打开浏览器输入http://127.0.0.1:8000/sims/即可进入学生信息管理列表页
10.功能演示
最后最重要的事情,看效果。我这里简单演示下,话不多说,看动态图
基于Python+Django+MySQL环境搭建一个拥有增删改查功能的Python Web就完成了。希望能够真正帮到大家快速入门Python Web开发。
完整素材及全部代码
代码已上传csdn,0积分下载,觉得有所帮助的朋友点点赞给个关注哦,谢谢您!
相关文章:

基于Python+Django+MySQL实现Web版的增删改查
Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web。 开发环境 开发工具:Pycharm 2020.1开发语言:Python 3.8.0Web框架:Django 3.0.6数据库:…...

Map、Set和Object的区别
Set ES6提供了新的数据结构Set,类似于数组,但成员值是唯一的,没有重复的值 Set本身是一个构造函数(要 new),用来生成Set数据结构 Set 对象允许你储存任何类型的唯一值,无论是原始值或者是对象引用 每个值在 Set 中…...

Web 安全之盗链(Hotlinking)攻击详解
目录 什么是盗链 盗链原理 盗链类型 盗链的危害 如何发现盗链 盗链防范措施 法律法规与应对策略 小结 盗链(Hotlinking)攻击,作为互联网安全领域的一个重要话题,涉及到侵犯版权、滥用资源和网络安全等多个层面。盗链现象普…...
leetcode算法笔记-算法复杂度
对于时间复杂度,主要包括三种情况: 渐进紧确界: O渐进上界: 渐进下界: 加法原则:不同的时间复杂度相加取阶数最高的 乘法原则:不同的时间复杂度相乘,结果为时间复杂度的乘积 阶乘…...

推荐算法详解
文章目录 推荐算法引言基于内容的推荐原理算法步骤注意点可以优化的地方示例代码讲解 协同过滤推荐原理算法步骤注意点可以优化的地方示例代码讲解 混合推荐系统原理算法步骤注意点可以优化的地方示例1代码讲解1示例2代码讲解2 基于知识的推荐原理算法步骤注意点可以优化的地方…...

Java找不到包解决方案
在跟着教程写Spingboot后端项目时,为了加快效率,有时候有的实体文件可以直接粘贴到目录中,此时运行项目会出现Java找不到包的情况,即无法找到导入的实体文件,这是项目没有更新的原因。解决方法: 刷新Maven:…...

vue的css深度选择器 deep /deep/
作用及概念 当 <style> 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素,父组件的样式将不会渗透到子组件。在vue中是这样描述的: 处于 scoped 样式中的选择器如果想要做更“深度”的选择,也即:影响到子…...

2024年华为OD机试真题-计算三叉搜索树的高度-(C++)-OD统一考试(C卷D卷)
题目描述: 定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。 查找的规则是: 1. 如果数小于节点的数减去500,则将数插入节点的左子树 2. 如果数大于节点的数加上500,则将…...

# ERROR: node with name “rabbit“ already running on “MS-ITALIJUXHAMJ“ 解决方案
ERROR: node with name “rabbit” already running on “MS-ITALIJUXHAMJ” 解决方案 一、问题描述: 1、启动 rabbitmq-server.bat 服务时,出错 Error 2、查询 rabbitmqctl status 状态时,出错 Error 3、停止 rabbitmqctl stop 服务时&a…...

class常量池、运行时常量池和字符串常量池详解
类常量池、运行时常量池和字符串常量池这三种常量池,在Java中扮演着不同但又相互关联的角色。理解它们之间的关系,有助于深入理解Java虚拟机(JVM)的内部工作机制,尤其是在类加载、内存分配和字符串处理方面。 类常量池…...

Meilisearch使用过程趟过的坑
Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…...

全面升级企业网络安全 迈入SASE新时代
随着数字化业务、云计算、物联网和人工智能等技术的飞速发展,企业的业务部署环境日渐多样化,企业数据的存储由传统的数据中心向云端和SaaS迁移。远程移动设备办公模式的普及,企业多分支机构的加速设立,也使得企业业务系统的用户范…...

2024.1IDEA 到2026年
链接:https://pan.baidu.com/s/1hjJEV5A5k1Z9JbPyBXywSw?pwd9g4i 提取码:9g4i解压之后,按照 操作说明.txt 操作; IntelliJ IDEA 2024.1 (Ultimate Edition) Build #IU-241.14494.240, built on March 28, 2024 Licensed to gurgles tumbles You have…...

uniapp——点赞、取消点赞
案例 更新点赞状态,而不是每次都刷新整个列表。避免页面闪烁,提升用户体验 代码 <view class"funcBtn zan" click"onZan(index,item.id)"><image src"/static/images/circle/zan.png" mode"aspectFill&…...

react经验15:拖拽排序组件dnd-kit的使用经验
应用场景 列表中的成员可鼠标拖拽改变顺序 实施步骤 前置引入 import type { DragEndEvent } from dnd-kit/core import { DndContext } from dnd-kit/core import {arrayMove,/*垂直列表使用verticalListSortingStrategy,横向列表使用horizontalListSortingStrategy*/vert…...

Webpack模块联邦:微前端架构的新选择
Webpack模块联邦(Module Federation)是Webpack 5引入的一项革命性特性,它彻底改变了微前端架构的实现方式。模块联邦允许不同的Web应用程序(或微前端应用)在运行时动态共享代码,无需传统的打包或发布过程中…...

CMake 学习笔记(访问Python)
CMake 学习笔记(访问Python) 利用Python可以做很多事情。比如: 利用 Python 自动生成一些代码。 在我们的程序中植入一个 Python 解释器。 为了做这些事情。就需要 CMake 能够知道 python 装在哪里,装的是什么版本的 python&a…...

【ruoyi】docker部署 captchaImage接口 FontConfiguration空指针异常
后台服务报错captchaImage接口空指针异常,无法启动项目: [http-nio-4431-exec-27] ERROR c.r.f.w.e.GlobalExceptionHandler - [handleRuntimeException,93] - 请求地址/captchaImage,发生未知异常.java.lang.NullPointerException: nullat sun.awt.Font…...

P1443 马的遍历
题目描述: 有一个 𝑛𝑚nm 的棋盘,在某个点 (𝑥,𝑦)(x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。 代码: package lanqiao;import java.util.*;public class Main {static int n,m…...

AI学习指南概率论篇-贝叶斯推断
AI学习指南概率论篇-贝叶斯推断 概述 在人工智能中,贝叶斯推断是一种基于贝叶斯统计理论的推理方法。它通过使用概率论的知识,结合先验信息和观测数据,来更新对未知变量的推断。贝叶斯推断提供了一种合理的方法来处理不确定性,并…...

大数据测试
1、前言 大数据测试是对大数据应用程序的测试过程,以确保大数据应用程序的所有功能按预期工作。大数据测试的目标是确保大数据系统在保持性能和安全性的同时,平稳无差错地运行。 大数据是无法使用传统计算技术处理的大型数据集的集合。这些数据集的测试涉…...

金融业开源软件应用 管理指南
金融业开源软件应用 管理指南 1 范围 本文件提供了金融机构在应用开源软件时的全流程管理指南,对开源软件的使用和管理提供了配套 组织架构、配套管理规章制度、生命周期流程管理、风险管理、存量管理、工具化管理等方面的指导。 本文件适用于金融机构规范自身对开…...

SolidWorks 齿轮配合
SolidWorks 齿轮配合 在SolidWorks中,齿轮配合是一种特殊的配合类型,用于模拟两个或多个齿轮之间的旋转关系。这种配合确保当一个齿轮旋转时,其他齿轮按照特定的比例旋转,非常适合模拟机械传动系统。以下是使用齿轮配合的详细步骤…...

鸿蒙开发-ArkTS语言-XML
鸿蒙开发-UI-web 鸿蒙开发-UI-web-页面 鸿蒙开发-ArkTS语言-基础类库 鸿蒙开发-ArkTS语言-并发 鸿蒙开发-ArkTS语言-并发-案例 鸿蒙开发-ArkTS语言-容器 鸿蒙开发-ArkTS语言-非线性容器 文章目录 前言 一、XML概述 二、XML生成 三、XML解析 1.解析XML标签和标签值 2.解析XML属性…...

网安面经之文件上传漏洞
一、文件上传漏洞 1、文件上传漏洞的原理?危害?修复? 原理:⽂件上传漏洞是发⽣在有上传功能的应⽤中,如果应⽤程序对⽤户上传的⽂件没有控制或者存在缺陷,攻击者可以利⽤应⽤上传功能存在的缺陷ÿ…...

如何使用 WavLM音频合成模型
微软亚洲研究院与 Azure 语音组的研究员们提出了通用语音预训练模型 WavLM。通过 Denoising Masked Speech Modeling 框架(核心思想是通过预测被掩蔽(即遮蔽或删除)的语音部分来训练模型,同时还包括去噪的过程)&#x…...

学习java第六十七天
注入 Bean 的注解有哪些? 答: Autowired:根据类型进行注入,如果匹配到多个Bean,则会爆出异常。可以和Qualifier搭配使用,指定使用哪个名称的Bean Resource:首先根据名称注入,如果…...

Linux(Ubuntu24.04) 安装 MinIO
本文所使用的 Ubuntu 系统版本是 Ubuntu 24.04 ! # 1、下载 MinIO wget https://dl.min.io/server/minio/release/linux-amd64/minio# 2、添加可执行权限 chmod x minio# 3、导出环境变量,用于设置账号密码,我设置的账号和密码都是 minioadmin export MI…...

视频汇聚边缘网关EasyCVR硬件设备无法访问域名,解析失败该如何处理?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传统安防视…...

差速机器人模型LQR 控制仿真(c++ opencv显示)
1 差速机器人状态方程构建 1.1差速机器人运动学模型 1.2模型线性化 1.3模型离散化 2离散LQR迭代计算 注意1:P值的初值为Q。见链接中的: 注意2:Q, R参数调节 注意3:LQR一般只做横向控制,不做纵向控制。LQR输出的速度…...