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使用CMD模块更优雅的运行脚本
May 11 Python
python检测某个变量是否有定义的方法
May 20 Python
Python运算符重载用法实例
May 28 Python
Python 对输入的数字进行排序的方法
Jun 23 Python
Python装饰器模式定义与用法分析
Aug 06 Python
pytorch中torch.max和Tensor.view函数用法详解
Jan 03 Python
Python用input输入列表的实例代码
Feb 07 Python
python字符串的index和find的区别详解
Jun 20 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
python 基于wx实现音乐播放
Nov 24 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 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原创论坛
2006/10/09 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
2018/08/14 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
用Python的urllib库提交WEB表单
2009/02/24 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
python 实现两个线程交替执行
2020/05/02 Python
python try...finally...的实现方法
2020/11/25 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
大二自我鉴定范文
2013/10/05 职场文书
经典英文广告词
2014/03/18 职场文书
个人担保书范文
2014/05/20 职场文书
四风问题查摆材料
2014/08/25 职场文书
环卫工作汇报材料
2014/10/28 职场文书
管理失职检讨书范文
2015/05/05 职场文书
活动费用申请报告
2015/05/15 职场文书