Python+Django+MySQL实现基于Web版的增删改查的示例代码


Posted in Python onMay 13, 2020

 前言

本篇使用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

Python+Django+MySQL实现基于Web版的增删改查的示例代码

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

Python+Django+MySQL实现基于Web版的增删改查的示例代码

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

Python+Django+MySQL实现基于Web版的增删改查的示例代码

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

pip install django
pip install mysqlclient

Python+Django+MySQL实现基于Web版的增删改查的示例代码

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

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

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

2. 创建应用

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

python manage.py startapp sims

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

Python+Django+MySQL实现基于Web版的增删改查的示例代码

3.配置MySQL数据库

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

Python+Django+MySQL实现基于Web版的增删改查的示例代码

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

Python+Django+MySQL实现基于Web版的增删改查的示例代码

下载连接驱动和配置数据库连接信息

Python+Django+MySQL实现基于Web版的增删改查的示例代码

点击Test Connection测试连接,连接通过点击OK出现如下的结构信息表示连接本地MySQL成功

Python+Django+MySQL实现基于Web版的增删改查的示例代码

4.数据模型创建(M)

在应用sims下models.py添加Student模型

Python+Django+MySQL实现基于Web版的增删改查的示例代码

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 sims
python manage.py migrate sims

生成数据表结构如下所示

Python+Django+MySQL实现基于Web版的增删改查的示例代码

6.路由配置

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

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include

urlpatterns = [
 path('admin/', admin.site.urls),
 url(r'^sims/', include('sims.urls'))
]

然后在sims添加一个名为urls.py的文件,添加路由配置如下

Python+Django+MySQL实现基于Web版的增删改查的示例代码

# 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)
]

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)

Python+Django+MySQL实现基于Web版的增删改查的示例代码

学生信息列表页

<!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

Python+Django+MySQL实现基于Web版的增删改查的示例代码

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

10.功能演示

最后最重要的事情,看效果。我这里简单演示下,话不多说,看动态图

Python+Django+MySQL实现基于Web版的增删改查的示例代码

结语

至此,基于Python+Django+MySQL环境搭建一个拥有增删改查功能的Python Web就完成了。希望能够真正帮到大家快速入门Python Web开发。如果在搭建过程中您有遇到什么问题,欢迎在下方留言,看到我会立即回复的!可以的话给个关注哦,谢谢您!

附录

最后附上项目整个源码的github仓库地址 https://github.com/hxrui/python-diango-web.git,欢迎star交流学习。

到此这篇关于Python+Django+MySQL实现基于Web版的增删改查的文章就介绍到这了,更多相关Python+Django+MySQL实现基于Web版的增删改查内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
Python中使用partial改变方法默认参数实例
Apr 28 Python
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
python 链接sqlserver 写接口实例
Mar 11 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 Python
使用python如何删除同一文件夹下相似的图片
May 07 Python
Python使用Numpy模块读取文件并绘制图片
May 13 #Python
python pyecharts 实现一个文件绘制多张图
May 13 #Python
Django与pyecharts结合的实例代码
May 13 #Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 #Python
Python爬取阿拉丁统计信息过程图解
May 12 #Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 #Python
Python3.7下安装pyqt5的方法步骤(图文)
May 12 #Python
You might like
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
javascript实现时钟动画
2020/12/03 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
Python实现去除代码前行号的方法
2015/03/10 Python
简单的Python的curses库使用教程
2015/04/11 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python 贪心算法的实现
2020/09/18 Python
python PIL模块的基本使用
2020/09/29 Python
入党自我评价优缺点
2014/01/25 职场文书
篝火晚会主持词
2014/03/25 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书