前文
Django 实战 (1)—— 创建第一个Django项目
Django 实战 (2)—— 视图与 URL 配置
Django 实战 (3)—— Django 是怎么处理请求的?
Django 实战 (4)——连接 MySQL
在上一篇文章中,我们对数据库数据实现了新增,但是还有删除、修改、查询呢,这里就来实现删除、修改、查询的操作,也是非常简单的
这里是我们数据库中的数据
删除数据
在 views.py 中编写以下代码
from django.http import HttpResponse
from webapp.models import Test
def delete(request):
Test.objects.filter(username='Lisa').delete() # 根据姓名删除数据
return HttpResponse("删除数据成功")
注意: 如果执行该操作 objects.all().delete(),将返回空值
接着,打开 urls.py 编写以下代码
from webapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/',hello),
path('delete/',views.delete)
]
OK.,代码编写完成,我们测试一下能否删除数据了,启动一下 Django 项目,访问 http://127.0.0.1:8000/delete/
OK,页面显示说我们已经成功删除数据,我们刷新一下数据库看下
OK,已经删除了
其实这代码转换成 SQL 的话就是:delete from 表名 where username = 'Lisa’
修改数据
修改数据也是非常简单
这里我们以修改 username 为例,就把 django 修改为 Django 吧。同样的,我们需要在 views.py(其实不限定的哈,你可以自定义一个文件来写业务代码,这里只是为了演示而已) 中编写代码
from django.http import HttpResponse
from webapp.models import Test
def update(request):
user = Test.objects.get(username="django") # 原本的用户名为 django
user.username = "Django" # 修改后的用户名为 Django
return HttpResponse("修改数据成功")
在 urls.py 中新增代码如下:
from webapp import views
urlpatterns = [
path('update',views.update)
]
重启服务,访问一下 http://127.0.0.1:8000/update/
OK,说明我们修改数据成功了,我们刷新一下数据库看下是不是 把 django 修改为 Django 了
怎么回事???怎么没修改到?是报错了吗?我们看下控制台
没有啊,控制台显示访问正常啊,那怎么没修改到数据呢?不慌,我们来分析一下
user = Test.objects.get(username="django") # 原本的用户名为 django
user.username = "Django" # 修改后的用户名为 Django
- 首先第一行代码我们是查询用户名为 django 的用户,转换成 SQL 就是 select id,username,password from 表名 where username = ‘django’
- 第二行代码才是我们要修改的的数据,转换为 SQL 就是 update 表名 set username = ‘Django’ where username = ‘django’
所以我们还需要一个保存的操作,也就是在代码中增加一句保存操作的代码,如下:
def update(request):
user = Test.objects.get(username="django") # 原本的用户名为 django
user.username = "Django" # 修改后的用户名为 Django
user.save() # 保存操作
return HttpResponse("修改数据成功")
重启服务,再次访问 http://127.0.0.1:8000/update/
我们再刷新一下数据库
OK,已经修改数据成功,但是这种做法好像不太聪明的样子,就没有一行代码搞定的那种吗?我们可以是直接使用 filter 来过滤然后使用 update函数,如下:
def update(request):
user = Test.objects.filter(id=1).update(username='Django') # 将用户名为 django 的用户修改为 Django
return HttpResponse("修改数据成功")
这段代码与上面的效果一样,转化为SQL是:update 表名 set username = ‘Django’ where id = 1
但是与之等同的 SQL 语句变得更高效,并且不会引起竞争条件
说明: update() 方法会返回一个整型数值,表示受影响的记录条数
比如我们打印一下 user,表示一条数据受影响了
查询数据
all()
查询所有数据,返回的是有个 QuerySet 集合
def selectAll(request):
user_list = Test.objects.all() # 查询所有字段
filter()
如果只需要删除部分的数据,就不需要调用all()方法
def selectAll(request):
user = Test.objects.filter(username='Django') # 根据条件查询
这里只讲述这两个方法,关于其他的方法朋友们可以查阅一下官方文档
为了更好的演示查询,我们编写一个 html 网页来测试一下吧,我们创建项目的时候会有一个 templates 模板,这是一个可以存放 html 页面的文件夹,我们在该文件夹下创建一个 html 文件吧
html 代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<table border="1" style="width: 100%">
<tr style="text-align: center">
<td>用户ID</td>
<td>用户名</td>
<td>用户密码</td>
</tr>
<!--使用迭代器循环遍历获取值-->
{% for user in user %}
<tr style="text-align: center">
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
说明:上面的代码中比较新颖的地方就是下面这段代码了
{% for user in user %}
<tr style="text-align: center">
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
其实就是下面这段代码有点难理解而已,这是一个组合,相当于 html 中的标签,有个开标签({% for 迭代名 in 被迭代名 %})还需要有个闭标签({% endfor %})
{% for 迭代名 in 被迭代名 %}
{% endfor %}
其实这段代码也并不难理解,这其实跟 for 循环没什么区别
for i in item:
print(i)
所以这段代码就是把 user 中的信息迭代显示在 html 页面上,那么这个被 迭代的 user 是从哪里得到的数据呢?
{% for user in user %}
<tr style="text-align: center">
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
是从我们在 views.py 文件中定义来的
from django.shortcuts import render
from webapp.models import Test
def selectAll(request):
user_list = Test.objects.all() # 查询所有字段
return render(request,"user.html",{'user':user_list}) # 将查询到的值赋予给user作用域
通过代码我们可以知道,我们想得到的结果集让 user_list 接受,然后 render 方法返回一个 html 页面,其中 { ‘user’ : user_list } 就是把我们 user_list 接收到的数据传给 user,从而让 html 可以得到我们传过去的值
编写完 views.py 之后我们还有修改一个 urls.py 文件
from webapp import views
urlpatterns = [
path('insert/',views.insert),
path('userList/',views.selectAll),
path('delete/',views.delete),
path('update/',views.update)
]
OK,我们重启一下服务,访问一下 http://127.0.0.1:8000/userList/
OK,这就是查询