Python Web实战:Python+Django+MySQL实现基于Web版的增删改查

项目实战

1.创建项目(sms)

File->New Project->Django

稍等片刻,项目的目录结构如下图

项目创建后确认是否已安装Django和mysqlclient解释器,如何确认?file->Settings

如果没有请在Terminal终端输入以下命令完成安装

pip install django
pip install mysqlclient

领资料、源码,戳一戳

领资料、源码,戳一戳
如果在执行pip install 报错Read time out请设置延长下超时时间,默认15s,网络不好情况下很易超时

pip --default-timeout=180 install -U django
pip --default-timeout=180 install -U mysqlclient

参数-U是–upgrade简写,把安装的包升级到最新版本

2.创建应用(sims)

打开Pycharm的Terminal终端,输入以下命令创建sims应用

python manage.py startapp sims

应用创建后要在项目的settings.py文件里的INSTALLED_APPS下面添加smis完成应用注册

3.Django配置MySQL

在本地MySQL创建sms数据库,修改项目的settings连接信息由默认的sqlite修改为MySQL

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模型

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

5.数据模型迁移

Terminal终端输入以下两条命令,其作用第一条生成文件记录模型的变化;第二条是将模型变化同步至数据库,我们可以在数据库生成对应的表结构。

python manage.py makemigrations simspython manage.py migrate sims

生成数据表结构如下所示


领资料、源码,戳一戳

6.路由配置

本质可以理解请求路径url和处理方法的映射配置,首先在项目sms的urls.py文件中添加sims的路由配置

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的文件,添加路由配置如下

# 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框架提供的操作数据库方式。

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)

  • 学生信息列表页
<!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>
  • 学生信息新增页
<!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>
  • 学生信息编辑页
<!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服务

python manage.py runserver

![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pLmxvbGkubmV0LzIwMjAvMDUvMTAvTTRlZ242NWsyTmhPekxWLnBuZw?x-oss-process=image/format,
#png#pic_cente
领资料、源码,戳一戳

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

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

相关文章

C++初学者指南第一步---5.介绍std::vector

C初学者指南第一步—5.介绍std::vector 目录 C初学者指南第一步---5.介绍std::vector1.初始化/访问2.添加元素3.Resizing调整大小4.在尾部删除元素5. 复制一直是深拷贝&#xff01; 注意std代表C标准库的命名空间&#xff0c;vector&#xff08;向量&#xff09;是标准库中的一…

18V-180V降5V500mA恒压WT5118

18V-180V降5V500mA恒压WT5118 如何实现18V-180V宽电压输入下的恒压5V 500mA输出。输入电压是波动的18V还是高达180V,WT5118都能确保输出端提供稳定的5V电压和500mA的电流。 WT5118 是一款集成了 180V 高电压 MOSFET 的 DC-DC 控制器&#xff0c;专为开关电源设计。该设备具备内…

数字孪生智慧应用场景——数字孪生智慧城市各行业领域应用场景学习参考资料

下面资源来源于网络&#xff0c;如有侵权请联络删除&#xff01; 数字孪生技术&#xff0c;作为近年来科技领域的热门话题&#xff0c;其发展情况与应用领域正不断拓展深化。简单来说&#xff0c;数字孪生技术是通过构建一个与物理实体相对应的虚拟模型&#xff0c;实现对物理世…

国产化ETL产品必备的特性(非开源包装)

ETL负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行抽取、清洗&#xff08;净化&#xff09;、转换、装载、标准、集成&#xff08;汇总&#xff09;...... 最后加载到数据仓库或数据集市中&#xff0c;成为联机分析处理、数据挖掘的基础。…

代码生成器技术乱弹五十三,人工智能和通用代码生成器的共同点:Token

代码生成器技术乱弹五十三&#xff0c;人工智能和通用代码生成器的共同点&#xff1a;Token 现在&#xff0c;随着人工智能的快速发展&#xff0c;特别是生成式人工智能的爆火&#xff0c;大家逐渐熟悉了一个概念&#xff0c;Token。我称之为字牌。在生成式人工智能的语境下&a…

OpenAI 联合创始人 Ilya Sutskever 的新初创公司致力于“安全超级智能”

OpenAI 前首席科学家伊利亚-苏茨克沃尔&#xff08;Ilya Sutskever&#xff09;在今年 5 月离开了他共同创立的人工智能研究公司后&#xff0c;透露了他的下一个重要项目。 相关阅读&#xff1a;GPT-4o通过整合文本、音频和视觉实现人性化的AI交互&#xff0c;OpenAI推出了其新…

大电流与小电流在检测原理上有区别吗

1 常用电流检测原理 1.1 分流器原理 被测量的电流在输入端电阻上Rshunt形成电压正比于测量电流&#xff0c;通过同相比例电路进行放大输出。 缺点&#xff1a; 输入电流减小时&#xff0c;需要更大的Rshunt&#xff1b;输入电阻Rshunt串入检测回路内将引起被测电流减小&a…

山西青年杂志山西青年杂志社山西青年编辑部2024年第10期目录

本刊专稿 共融共创、校企共建BIM创新创业中心的探索与实践 黄强;马福贵;贾晓敏;苏艳贞;魏艳卿; 1-3 财务管理课程专创融合教学改革与实践 宋衍程; 4-7 数字化赋能国际贸易实务课程建设研究 吴珍彩; 8-11《山西青年》投稿&#xff1a;cn7kantougao163.com 青年教育研…

测试时间被压缩的有效应对策略

测试时间被压缩时的有效应对策略 1. 优先级管理2. 使用自动化工具3. 优化测试流程4. 减少测试范围5. 提高测试人员效率6. 快速反馈7. 争取更多有效的资源8. 记录相关风险及建议9. 前期把控10. 测试总结和吸取经验教训 在软件开发中&#xff0c;测试时间的压缩是常见的挑战&…

GD32F303 低功耗模式要点

我们都知道&#xff0c;MCU有低功耗模式&#xff0c;比如GD32F303芯片&#xff0c;就有Sleep、Deepsleep和Standby三种模式。关于这三种模式的具体使用方法&#xff0c;小伙伴们可以参考《GD32F30x系列用户手册》。 今天我们来聊下几个低功耗模式要点。 1、进入低功耗模式后I…

若依RuoYi-Vue分离版—多环境配置

若依RuoYi-Vue分离版—多环境配置 方式一&#xff1a;需要新建application-{profile}.yml文件方式二&#xff1a;不需要新建文件&#xff0c;使用文档分隔符 &#xff08;不推荐&#xff09;总结 若依支持通过简单的配置&#xff0c;切换不同的环境&#xff0c; 如开发环境&…

perfect-scrollbar缩小浏览器窗口滚动条无线滚动的bug

https://github.com/mdbootstrap/perfect-scrollbar/issues/153

Sa-token基本使用教程(全网最详细!!!)

1.概述 1.1 Sa-Token介绍 功能简单示例 1.2 Sa-Token 功能一览 2. 使用 2.1 导入依赖 2.2 springBoot的简单集成 2.2.1 配置文件 2.2.2 controller 2.2.3 简单登录页面 2.3 功能详解 2.3.1 登录认证 2.3.1.1 登录与注销 NotLoginException 登录分析 先校验账号和…

Python3,10行代码,从数据库获取各个维度的数据统计,并把结果输出在Excel中。

10行代码自动统计数据 1、引言2、代码实例3、总结 1、引言 小屌丝&#xff1a;鱼哥帮个忙 小鱼&#xff1a;稍等会哦&#xff0c; 小屌丝&#xff1a;好嘞。 小屌丝&#xff1a; 鱼哥&#xff0c; 还没忙完嘛&#xff1f; 小鱼&#xff1a;快了快了&#xff0c; 再耐心等一等…

【JVM】详解Java 堆内存分区

Java 堆内存&#xff08;Heap Memory&#xff09;是 Java 虚拟机&#xff08;JVM&#xff09;中用于存储对象实例的区域。为了更有效地管理和回收内存&#xff0c;Java 堆通常被划分为不同的区域&#xff0c;每个区域有特定的用途和特点。以下是 Java 堆内存分区的定义、作用以…

P2433【深基1-2】小学数学 N 合一

1. 题目链接 https://www.luogu.com.cn/problem/P3954 【深基1-2】小学数学 N 合一 2. 题目描述 问题1&#xff1a;输出I love Luogu! 问题2&#xff1a;10个苹果&#xff0c;A拿走2个&#xff0c;U拿走4个&#xff0c;B拿走剩下的&#xff0c;求A和U一共拿走几个&#xff0c…

Springboot拓展之整合邮件 JavaMail的使用与实操

邮件 电子邮件仍然是我们企业间交往的一种非常常见的方式 发送简单邮件 第一步首先导入坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.6.13</version&…

win11家庭版使用自带的Linux子系统并安装docker【全网整合版】

1. 电脑配置项 开发者选项 设置->系统->开发者选项 启用或关闭windows功能 控制面板->卸载程序->启用或关闭windows功能 勾选适用于Linux的Windows子系统和虚拟机平台并重启电脑(首次勾选选项时电脑提示重启) Hyper-V 关键点&#xff1a;win11家庭版在启动…

不知道怎么下载原版系统,这几个原版系统下载网站可以帮你

电脑是我们日常办公生活中必备不可少的设备&#xff0c;无论是个人使用还是企业部署&#xff0c;拥有一个稳定、安全且纯净的操作系统对于保障数据安全和提升使用体验至关重要。然而&#xff0c;网络上充斥着各种二次打包的系统版本&#xff0c;这些版本往往携带了第三方软件或…

C++ 矩阵的最小路径和解法

描述 给定一个 n * m 的矩阵 a&#xff0c;从左上角开始每次只能向右或者向下走&#xff0c;最后到达右下角的位置&#xff0c;路径上所有的数字累加起来就是路径和&#xff0c;输出所有的路径中最小的路径和。 数据范围: 1≤&#x1d45b;,&#x1d45a;≤5001≤n,m≤500&…