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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 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交流学习。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
373 0
|
3月前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
906 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
4月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
520 64
|
3月前
|
安全 Linux PHP
Web渗透-命令执行漏洞-及常见靶场检测实战
命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
945 0
|
5月前
|
SQL 存储 关系型数据库
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!
191 26
|
6月前
|
IDE 开发工具 Python
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级,不升级无法使用,安装python扩展包的时候一直停留在installing
173 4
|
6月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
268 1
|
7月前
|
开发者
(WEB CAD online )在线CAD实现圆孔标记功能
本文介绍了通过自定义实体 `McDbTestRoundHoleMark` 实现圆孔标记功能的方法。该功能支持多象限标记、可调节标记角度、多重标记及动态编辑,并自动计算包围盒以优化空间定位与选择操作。核心实现包括类结构定义、数据序列化、标记数据设置、夹点编辑及实体绘制等步骤。用户可通过插件初始化注册并创建圆孔标记,适用于工程图纸标注场景。在线Demo展示了实际效果,便于开发者参考与使用。
|
8月前
|
前端开发 JavaScript 关系型数据库
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
261 6
|
9月前
|
存储 关系型数据库 MySQL
MySQL细节优化:关闭大小写敏感功能的方法。
通过这种方法,你就可以成功关闭 MySQL 的大小写敏感功能,让你的数据库操作更加便捷。
688 19

热门文章

最新文章

推荐镜像

更多