Python高级编程-DJango3
失败是成功之母
1.增加
我们可以先在控制台输出一下提交的信息 简单的看一下增加 把form中的input信息发给视图函数
def addStu(request):
name=request.POST.get("sname")
sex=request.POST.get("ssex")
print(name,sex)
return render(request,"add_stu.html")
设置地址
修改 HTML文件
点击运行 输入内容并提交
查看结果
下面我们开始正式的做增加
1)创建模型
from django.db import models
# Create your models here.
# 模型就是MySQL表(ORM映射:把python的类与MySQL的表对应起来)
class Student(models.Model):
sname=models.CharField(max_length=90)
ssex=models.CharField(max_length=60)
# 创建表一定要有主键
sid=models.AutoField(primary_key=True)
class Meta(object):
db_table="stu"
2)在python中安装MySQL
from pymysql import install_as_MySQLdb
install_as_MySQLdb() # 让pymysql以 MySQLDB的运行模式和django的ORM对接运行
3)在视图函数中 把要存的值存入到模型中
视图函数再传递给MySQL 通过模型就能够把值发给MySQL
def addStu(request):
#数据库在哪儿 数据库名 用户名 密码
name=request.POST.get("sname")
sex=request.POST.get("ssex")
stu=Student.objects.create(sname=name,ssex=sex)
# stu=Student(sname=name,ssex=sex)
stu.save()
return render(request,"add_stu.html")
4)根据模型手动生成脚本
首先 在settings.py加入自己的创建的模块
然后 在terminal中输入
python manage.py makemigrations
生成SQL脚本
5)根据生成的脚本 在mysql中创建表
python manage.py migrate
6)增加
做完上面的操作以后 我们点击重新运行
在网页打开时 我们要先显示出网页
http://127.0.0.1:8000/showStu/
输入数据 点击提交
查看结果 增加就做好啦
2.查询
查询就是网页通过调用视图函数 视图函数调用模型获取数据 视图函数再把模型的值带到页面上 显示数据
首先 我们先创建一个主页 但是在创建主页时 默认django不支持iframe 所以我们需要添加以下配置
X_FRAME_OPTIONS = 'SAMEORIGIN'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--<table>标记 表示显示表格 width相对于浏览器100%-->
<table border="1" width="100%" height="100%">
{# 一对<tr>表示一行 一对<td>表示一列 #}
<tr height="15%">
<td colspan="2">top</td>
</tr>
<tr>
<td width="20%">
<!--a 是超链接 表示连接到其他网页或地址-->
<!--target="main"是容器名 指的是把网页显示到容器中-->
<a href="/showStu/" target="main">增加</a><br>
<a href="/findStu/" target="main">查询</a>
</td>
<!--iframe是一个显示网页的容器 src是网页地址 name是容器名称-->
<td><iframe src="/showStu" width="100%" height="100%" name="main"></iframe></td>
</tr>
</table>
</body>
</html>
网页做出来以后 我们开始做查询
1)网页调用视图函数
2)视图函数调用模型获取数据
3)视图函数把模型的值带到页面上 显示数据
给视图函数一个地址
下面我们编辑一下show_stu.html中的内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1" width="100%">
<tr><td>学生编号</td><td>学生姓名</td><td>学生性别</td></tr>
{% for stu in students %}
<!--{ {} }表示取值-->
<tr><td>{{ stu.sid }}</td><td>{{ stu.sname }}</td><td>{{ stu.ssex }}</td></tr>
{% endfor %}
</table>
</body>
</html>
3.删除
1)页面中写删除操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1" width="100%">
<tr><td>学生编号</td><td>学生姓名</td><td>学生性别</td><td>操作</td></tr>
{% for stu in students %}
<!--{ {} }表示取值-->
<tr>
<td>{{ stu.sid }}</td>
<td>{{ stu.sname }}</td>
<td>{{ stu.ssex }}</td>
<td><a href="deleteStuById?id={{ stu.sid }}">删除</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>
2)定义视图函数
def deleteStuById(request):
id=request.GET.get("id")
Student.objects.filter(sid=id).delete()
# 从表中获取所有数据
students=Student.objects.all()
# {表示把数据带到网页上}
return render(request, "show_stu.html",{"students":students})
3)添加映射
path('deleteStuById/',deleteStuById)
点击删除 操作成功
4.修改(回显 修改)
1)回显
①页面中写修改操作的语句
点击某一条记录 调用视图函数 把这条记录的值显示到网页上
<td><a href="/findStuById?id={{ stu.sid }}">修改</a></td>
②定义视图函数
def findStuById(request):
id = request.GET.get("id")
stu=Student.objects.filter(sid=id).first()
# {表示把数据带到网页上} 所以我们创建一个网页
return render(request, "updateStu.html", {"students": stu})
③添加映射
④updateStu网页修改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--form表示用来把input标记的内容进行收集 打包 发给后台的python-->
<!--action表示视图函数的地址-->
<form action="/addStu/" method="post">
{% csrf_token %}
学生编号<input type="text" value="{{ students.sid }}">
<!--name表示为输入框起个名 type表示输入框的类型 input表示输入标签-->
学生姓名<input type="text" name="sname" value="{{ students.sname }}">
学生性别<input type="text" name="ssex" value="{{ students.ssex }}">
<input type="submit">
</form>
</body>
</html>
此时 我们点击修改 页面跳转过来了
经过上面几步以后 我们已经完成了回显操作 回显的目的就是方便用户操作 在修改时不需要全部重新输入 下面我们开始做真正的修改(把form中input的值发给视图函数 视图函数再把值发给模型(表))
2)修改
①把form中input的值发给视图函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--form表示用来把input标记的内容进行收集 打包 发给后台的python-->
<!--action表示视图函数的地址-->
<form action="/updateStu/" method="post">
{% csrf_token %}
学生编号<input type="text" name="sid" value="{{ students.sid }}">
<!--name表示为输入框起个名 type表示输入框的类型 input表示输入标签-->
学生姓名<input type="text" name="sname" value="{{ students.sname }}">
学生性别<input type="text" name="ssex" value="{{ students.ssex }}">
<input type="submit">
</form>
</body>
</html>
②定义视图函数
def updateStu(request):
sid=request.POST.get("sid")
sname=request.POST.get("sname")
ssex=request.POST.get("ssex")
# 创建模型
stu=Student.objects.filter(sid=sid).first()
stu.sname=sname
stu.ssex=ssex
stu.save()
students = Student.objects.all()
# {表示把数据带到网页上}
return render(request, "show_stu.html", {"students": students})
③添加url映射
path('updateStu/',updateStu)
现在 我们就可以做修改了 我们将jhw修改为jhw1
修改成功