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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 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交流学习。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
5月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
668 7
|
5月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
6月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
754 0
|
6月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
323 101
|
6月前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
271 99
|
6月前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
346 98
|
5月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
473 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
5月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
5月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
1038 1
Python API接口实战指南:从入门到精通
|
5月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
181 12

推荐镜像

更多