Django用户管理案例——案例1
案例1主要介绍Django框架的应用,从而实现对数据的增、删、改和查的操作。
Django用户管理入门案例,主要有查询用户、添加用户和删除用户三个功能。其中查询用户是将指定表中的所有数据以列表形式显示到HTML页面;添加用户功能可以添加用户相关信息,并将这些信息写入到指定表中;删除用户功能可以根据用户的ID字段删除该用的数据。
1、业务要求
实现对用户的查询、添加和删除功能,如下图所示。
2、业务流程
首先在浏览器地址栏输入http://127.0.0.1:8000/info/list/登录用户展示页面,在用户展示页面中提供对所有用户的查看功能和添加用户、删除用户功能。
当点击添加用户按钮,进入到用户添加页面,输入用户相关信息,点击提交按钮将用户信息插入到数据库中,完成数据插入后返回到用户展示页面。
当点击删除用户按钮,获取被删除用户的指定ID,并根据ID删除当前用户,完成用户删除后返回到用户展示页面。
具体业务流程如下图所示。
3、代码显示
3.1 创建用户表
在models.py文件中创建UserInfo类,具体代码如下。
生成表;在Pycharm编译工具中点击Tool --> Run Manage.py Task选项,打开Django执行命令界面,依次执行makemigrations命令和migrate命令,在指定数据库中生成新表。
3.2 展示用户列表
查询指定表中所有数据,并展示到HTML页面中显示。
a. 在urls.py文件中,设置访问用户列表函数的访问路径。
# 案例:用户管理
path('info/list/', views.info_list),
b. 在views.py文件中,创建info_list函数,编写查看UserInfo表中数据逻辑,并将查看的结果返回给info_list.html页面。
c. 在info_list.html文件中获取返回的数据,并展示到页面中。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>查看用户</title>
</head>
<body>
<h3>用户列表</h3>
<a href="/info/add/">添加用户</a>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
<th>注册时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for obj in data_list %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>{{ obj.age }}</td>
{# 按照指定格式显示时间 #}
<td>{{ obj.registration_time|date:"Y-m-d"}}</td>
{# 拼接删除的跳转地址 #}
<td>
<a href="/info/delete/?nid={{ obj.id }}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
说明:上述代码中<td>{{ obj.registration_time|date:"Y-m-d"}}</td>,表示将数据库中时间类型的字段,以指定格式显示在页面。
3.2 添加用户
点击添加用户按钮,跳转到添加用户界面。输入用户相关信息后,点击提交按钮将用户信息写入到数据库,然后再返回到用户列表页面。
a. 在urls.py文件中,设置访问用户列表函数的访问路径。
# 添加用户
path('info/add/', views.info_add),
b. 在info_list.html文件中设置添加用户。
...
<h3>用户列表</h3>
<a href="/info/add/">添加用户</a>
<table border="1">
...
说明:在Django项目中使用<a>标签、重定向或者其它跳转方式时,跳转到外部网址需要在网址前添加域名(如:https://www.baidu.com),如果在当前项目中跳转,则不需要添加域名,Python会自动的拼接当前的域名(如:<a href=”/info/add/”>跳转</a>,实则为<a href=”http://127.0.0.1:8000/info/list/”>跳转</a>,或者redirect("/info/list"),实则为http://127.0.0.1:8000/info/list/)。
c. 在views.py文件中编写添加数据逻辑,大概步骤如下。
第一步:将请求转发到添加数据页面(info_add.html)。
第二步:在info_add.html文件编写<form>标签收集用户信息,然后将用户信息一起打包,跟请求一起提交到URL为/info/add/的函数中。
第三步:获取请求中的数据。
第四步:将数据写入到数据库。
第五步:跳转到用户列表页面,查询所有用户数据。
d. 添加数据页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
{# 注意:如果向当前地址发送请求,action="/info/add/"可以不写,默认表示向"/info/add/"地址发送请求 #}
<form method="post">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="text" name="pwd" placeholder="密码">
<input type="text" name="age" placeholder="年龄">
<input type="text" name="registration" placeholder="注册时间">
<input type="submit" value="提交">
</form>
</body>
</html>
说明:<form>标签没有设置action来访问指定的地址,是因为在Django中向当前的地址发送请求action可以不写,Django会默认以当前的地址为请求地址(例如:当前默认请求地址为action=”/info/add/”)。
3.2 删除用户
点击删除用户按钮,删除指定用户数据。数据删除后返回到用户列表页面。
a. 在urls.py文件中,设置访问用户列表函数的访问路径。
# 删除用户
path('info/delete/', views.info_delete),
b. 在页面添加删除按钮
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
<th>注册时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for obj in data_list %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>{{ obj.age }}</td>
{# 按照指定格式显示时间 #}
<td>{{ obj.registration_time|date:"Y-m-d"}}</td>
{# 拼接删除的跳转地址 #}
<td>
<a href="/info/delete/?nid={{ obj.id }}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
c. 在views.py文件中编写删除指定用户数据逻辑。数据删除后返回到用户列表页面。