目录
经过前面的学习,相信您对Django、MySQL,以及他们之间的连接已经非常熟悉了,本文是一个关于Django、MySQL的一个小案例
案例需求:
设计一个表,包括姓名、密码、年龄,需要在页面上显示表中信息,并增加添加和删除按钮,点击添加按钮跳转至添加页面,输入内容后表中自动更新,点击删除后,自动删除该行表内容。
功能很简单,大家可以自己先试试
成果显示:
显示数据表
添加数据:
点击提交,数据库更新:
删除数据:
点击删除更新数据表:
源码展示:
url.py文件
python
# 用户管理
path("info/list/",views.info_list),
# 添加用户
path("info/add/",views.info_add),
# 删除用户
path("info/delete/",views.info_delete),
models.py文件
python
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
views.py文件
python
from app01.models import Department,UserInfo
def info_list(requests):
# 1、获取数据库中所有的用户信息
data_list = UserInfo.objects.all()
return render(requests,"info_list.html",{"data_list":data_list})
# 添加用户
def info_add(req):
if req.method == "GET":
return render(req,"info_add.html")
# 获取用户提交的数据
name = req.POST.get('name')
password = req.POST.get('pwd')
age = req.POST.get('age')
# 添加到数据库
UserInfo.objects.create(name=name,password=password,age=age)
# 正常跳转到其他页面需要在前面加一些东西,本机网址就不用加
return redirect("/info/list")
# 删除用户
def info_delete(req):
nid = req.GET.get('nid')
UserInfo.objects.filter(id=nid).delete()
return redirect("/info/list")
info_list.html文件
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户表</h1>
<!--添加一个a标签按钮,实现跳转-->
<a href="/info/add/">添加</a>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
<th>删除</th>
</tr>
</thead>
<tbody>
{% for item in data_list %}
<tr>
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.password}}</td>
<td>{{item.age}}</td>
<td>
<a href="/info/delete/?nid={{item.id}}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
info_add.html文件
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>添加用户</h1>
<form method="POST">
{% csrf_token %}
<input type="text" name="name" placeholder="用户名">
<input type="text" name="pwd" placeholder="密码">
<input type="text" name="age" placeholder="年龄">
<input type="submit" value="提交">
</form>
</body>
</html>
部分源码解释及注意
1、info_list.html文件
添加了一个a,标签,点击跳转到添加用户页面,实现页面间的跳转
html
<a href="/info/add/">添加</a>
使用for循环获取数据表中的id、name、password、age等内容
html
{% for item in data_list %}
<tr>
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.password}}</td>
<td>{{item.age}}</td>
<td>
<a href="/info/delete/?nid={{item.id}}">删除</a>
</td>
</tr>
{% endfor %}
添加了一个删除按钮,点击后跳转至对应行的id删除页面,自动删除,本机上输入url路径可以不用输入前面的http://127.0.0.1:8000/
html
/info/delete/?nid={{item.id}}
2、info_add.html文件
输入框记得添加Django独有的安全验证
html
{% csrf_token %}
3、models.py文件
创建的表和之前的一样,大家也可以自己设计个表
4、views.py文件
记得引入建立的数据类
python
from app01.models import UserInfo
info_list函数用来获取数据库内容,并传给html文件
python
def info_list(requests):
# 1、获取数据库中所有的用户信息
data_list = UserInfo.objects.all()
return render(requests,"info_list.html",{"data_list":data_list})
记得settings中要连接数据库!
info_add函数对应表单提交的POST请求,通过变量接收,再用mysqlclient写代码存入数据库中,再重定向至数据表显示页面
python
def info_add(req):
if req.method == "GET":
return render(req,"info_add.html")
# 获取用户提交的数据
name = req.POST.get('name')
password = req.POST.get('pwd')
age = req.POST.get('age')
# 添加到数据库
UserInfo.objects.create(name=name,password=password,age=age)
# 正常跳转到其他页面需要在前面加一些东西,本机网址就不用加
return redirect("/info/list")
info_delete函数获取删除id,对id行进行删除,然后重定向至显示页面
python
def info_delete(req):
nid = req.GET.get('nid')
UserInfo.objects.filter(id=nid).delete()
return redirect("/info/list")
这里需要注意,删除的逻辑是:
在info_list.html中加入了删除列,在点击删除按钮后,会发送对应id的删除请求,例如:
python
/info/delete/?nid=1
通过url传参,将要删除的id值传回视图函数,接收后执行数据库删除命令,再重定向到显示页面,从而实现几乎实时的删除和显示。
本次分享就到这儿了,期待您的三连!!!