Python Web实战:使用Python、Django和MySQL实现基于Web的增删改查功能

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Python Web实战:使用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.创建项目(sms)

File->New Project->Django

微信图片_20230706090757.png


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

微信图片_20230706090801.png


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


微信图片_20230706090808.png


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


pip install django

pip install mysqlclient

微信图片_20230706090837.png


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


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

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

1

2

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


2.创建应用(sims)

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


python manage.py startapp sims

1

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

微信图片_20230706090857.png


3.Django配置MySQL

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

微信图片_20230706090910.png


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

微信图片_20230706090914.png


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

微信图片_20230706090932.png

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

微信图片_20230706090936.png


4.数据模型创建(M)

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

微信图片_20230706090952.png



class Student(models.Model):

   student_no = models.CharField(max_length=32, unique=True)

   student_name = models.CharField(max_length=32)

5.数据模型迁移

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

微信图片_20230706090956.png

python manage.py makemigrations sims


python manage.py migrate sims


生成数据表结构如下所示


6.路由配置

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

微信图片_20230706091001.png

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



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


微信图片_20230706091031.png

学生信息列表页




   

   学生列表



   添加学生

   

       

       

       

       

   

   {% for student in students %}

       

           

           

           

           

       

   {% endfor %}


编号 姓名 学号 操作
{{ forloop.counter }} {{ student.student_name }} {{ student.student_no }}

               

                   编辑

               

               

                   删除

               

           



学生信息列表页




   

   学生列表



   添加学生

   

       

       

       

       

   

   {% for student in students %}

       

           

           

           

           

       

   {% endfor %}


编号 姓名 学号 操作
{{ forloop.counter }} {{ student.student_name }} {{ student.student_no }}

               

                   编辑

               

               

                   删除

               

           




学生信息新增页




   

   学生添加

   </code></div><div><code>        form {</code></div><div><code>            margin: 20px auto;</code></div><div><code>            width: 500px;</code></div><div><code>            border: 1px solid #ccc;</code></div><div><code>            padding: 20px</code></div><div><code>        }</code></div><div><code>    



   {% csrf_token %}

   

       

           

           

       

       

           

           

       

       

           

       

   

姓名
学号

               

           





   

   学生添加

   

       form {

           margin: 20px auto;

           width: 500px;

           border: 1px solid #ccc;

           padding: 20px

       }

   


学生信息编辑页




   

   学生编辑

   </code></div><div><code>        form {</code></div><div><code>            margin: 20px auto;</code></div><div><code>            width: 500px;</code></div><div><code>            border: 1px solid #ccc;</code></div><div><code>            padding: 20px</code></div><div><code>        }</code></div><div><code>    



   {% csrf_token %}

   

   

       

           

           

       

       

           

           

       

       

           

       

   

姓名
学号

               

           





9.启动web服务测试

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


python manage.py runserver

微信图片_20230706091038.png



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


10.功能界面演示

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


微信图片_20230706091041.gif

结语

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


附录

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


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
72 15
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
162 45
|
24天前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
1月前
|
API 数据库 开发者
深度剖析Django/Flask:解锁Web开发新姿势,让创意无限延伸!
在Web开发领域,Django与Flask如同两颗璀璨的星辰,各具特色。Django提供全栈解决方案,适合快速开发复杂应用;Flask则轻量灵活,适合小型项目和API开发。本文通过问答形式,深入解析两大框架的使用方法和选择策略,助你解锁Web开发新技能。
40 2
|
1月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
56 2
|
1月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
43 1
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
38 4
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
39 1
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
151 3
|
13天前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南