Python Web实战:Python+Django+MySQL实现基于Web版的增删改查
当学习完python基础知识后,对于过多的知识点,其实完全可以套用java的知识体系,学起来完全不困难,但是由于一次性接受知识点过多,需要在写项目中慢慢巩固,至于学习路线,我推荐去B站找配套学习资料,看自己往哪个方向发展,另外学习完python也可更简单的上手go,本章先进行Django框架的学习,后续会进行fastapi的学习,那么让我们开始吧~
前置准备
需要入门python基础知识,即便不知道也可根据代码进行猜测,真的非常easy,默认已经掌握MySQL相关知识
环境准备:
python3.10.x+pycharm2022+MySQL 8.0
除了python库以外,MySQL一定要是5.7+,这里我安装的是8.0,否则版本不适配,
推荐卸载旧版mysql文章
https://blog.csdn.net/weixin_42369926/article/details/81042133
推荐安装mysql8.0文章
https://blog.csdn.net/m0_52559040/article/details/121843945
效果图如下:
项目实战
1.创建项目File-->New project -->Django
项目的目录结构如下
项目创建后确认是否已安装Django和mysqlclient解释器,如何确认?
file->Settings
如果没有请在pycharm中安装或者在终端Terminal用命令安装
pip install djangopip install mysqlclient
由于pip直接安装连接国外网络,推荐国内镜像安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn django
创建app应用
打开pycharm的Terminal终端,应用创建后在sms的settings文件下,INSTALLED_APPS添加sims完成应用注册
python manage.py startapp sims
配置mysql
在本地MySQL创建sms数据库,修改项目的settings连接信息由默认的sqlite修改为MySQL
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
点击Test Connection测试连接,连接通过点击OK出现如下的结构信息表示连接本地MySQL成功
数据模型创建(M)
在应用sims下的models下创建Student类
class Student(models.Model): student_no = models.CharField(max_length=32, unique=True,) student_name = models.CharField(max_length=32)
数据模型迁移
Terminal终端输入以下两条命令,其作用第一条生成文件记录模型的变化;第二条是将模型变化同步至数据库,我们可以在数据库生成对应的表结构
python manage.py makemigrations sims
python manage.py migrate sims
路由配置(有坑)
本质可以理解请求路径url和处理方法的映射配置,首先在项目sms的urls.py文件中添加sims的路由配置
from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import url, include
urlpatterns = [ path('admin/', admin.site.urls), url(r'^sims/', include('sims.urls'))]
由于Django在3.0已经废弃django.conf.urls.url方法,这里将路径改为
from django.urls import re_path as url
完整代码如下
from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import includefrom django.urls import re_path as url
urlpatterns = [ path('admin/', admin.site.urls), url(r'^sims/', include('sims.urls'))]
然后在sims添加一个名为urls.py的文件,添加路由配置如下
from django.urls import re_path as urlfrom . import views
urlpatterns = [ url(r'^$', views.index), url(r'^add/$', views.add), url(r'^edit/$', views.edit), url(r'^delete/$', views.delete)]
处理函数(V)
在应用sims的视图层文件views.py添加对应学生信息增删改查的处理函数
import MySQLdbfrom 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('../')
模板页面(T)
列表页
<!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>
启动web服务
pycharm直接启动即可
服务启动后,打开浏览器输入http://127.0.0.1:8000/sims/即可进入学生信息管理列表页
结语
至此,基于Python+Django+MySQL环境搭建一个拥有增删改查功能的Python Web就完成了。希望能够真正帮到大家快速入门Python Web开发。如果在搭建过程中您有遇到什么问题,欢迎在下方留言,看到我会立即回复的!可以的话给个关注哦,谢谢您!
转载自https://www.cnblogs.com/haoxianrui/p/12861765.html
以上为转载内容,本人已实践启动项目,另推荐大家根据官网一步步搭建应用即可,django内容非常丰富,但是fastapi更符合Springboot开发流程,下期会讲到
我们看到源码中数据库连接语句多次重复出现,最简单的方法我们将conn语句提到最上方即可
但是django是支持ORM映射的,像mybatis那样能操作数据库语句就好了,当然可以,在Terminal执行如下语句
mac/linux
$ python manage.py sqlmigrate polls 0001
windows
...\> py manage.py sqlmigrate polls 0001
会在sims下产生一个/migrations/0001_initial.py文件
将原来的excute语句替换为
def index(request): students = Student.objects.all()
print(students) student_no = request.GET.get('student_no', '') student_name = request.GET.get('student_name', '')
sql = "SELECT id,student_no,student_name FROM sims_student WHERE 1=1 " if student_no.strip() != '': sql = sql + " and student_no = '" + student_no+"'" if student_name.strip() != '': sql = sql + " and student_name = '" + student_name+"'"
print(sql) return render(request, 'student/index.html', {'students': students})
这里的效果也是一样的
只是借助web项目加深对框架的认识,另外加深对基础知识点的熟悉,python实在优雅,但我也爱java
- 点赞
- 收藏
- 关注作者
评论(0)