Django使用ORM之单表操作(二)
1. GET请求和POST请求
都属于HTTP协议规定的请求方法
2. 什么时候用GET请求?
1. 浏览器想要得到一个HTML页面的时候
2. 搜索引擎查询关键字的时候 www.sogo.com/web/?query=迪丽热巴
3. 什么时候用POST?
1. 向后端提交数据
1. 大段的数据
2. 包含隐私的数据
3. 上传文件
4. 实际中GET和POST的应用场景
1. GET:
1. 直接在浏览器地址栏输入URL访问网站
2. a标签
3. 搜索引擎检索
2. POST:
1. 登录注册
2. 修改(新增)大段的数据
3. 上传文件
5. GET请求:
1. GET请求携带的数据都拼在了URL上 格式:127.0.0.1:8000/delete_publisher/?name=alex&id=7
2. GET请求携带的数据有长度限制 40k
6.request相关的知识点
1. request.method
1. GET
2. POST
2. request.POST --> 所有和post请求相关的数据
3. request.GET --> 所有和GET请求相关的数据
Django后端取值:request.GET.get("name")
7. 案例:对出版社列表进行增删改查操作
1.在models.py中创建Publisher对象
class Publisher(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=64,null=False,unique=True)
def __str__(self):
return "<Author Object: {}>".format(self.name)
2.列举出版社增删查改的对应关系
#urls.py文件中
#出版社对应关系
url(r'^publisher_list/', views.publisher_list),
url(r'^add_publisher/', views.add_publisher),
url(r'^delete_publisher/', views.delete_publisher),
url(r'^edit_publisher/', views.edit_publisher),
3.列举出所有的出版社信息
1.获取所有出版社信息集合
#views.py
def publisher_list(request):
ret = models.Publisher.objects.all() #获取全部出版社信息
return render(request,"Publisher_List.html",{"Publisher_list":ret}) #跳转到Publisher_List.html页面,并返回出版社集合
2.创建前端页面
#publisher_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>出版社列表</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<td>序号</td>
<td>ID值</td>
<td>出版社名称</td>
<td>操作</td>
</tr>
</thead>
<tbody>
{% for foo in Publisher_list%}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ foo.id }}</td>
<td>{{ foo.name }}</td>
<td>
<a href="/delete_publisher/?id={{ foo.id }}">删除</a>
<a href="/edit_publisher/?id={{ foo.id }}">编辑</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="/add_publisher/">添加出版社信息</a>
</body>
</html>
4.增加出版社信息
1.如果为GET请求则返回添加页面,如果为POST请求则更改数据库内容
#views.py
def add_publisher(request):
if request.method=="POST":
new_name = request.POST.get("publishername", None) #获取新增的出版社的名称
if new_name:
models.Publisher.objects.create(name=new_name) #用ORM插入数据库
return redirect("/publisher_list/")
else:
return HttpResponse("出版社名字不能为空!")
return render(request,"Add_Publisher.html")
2.返回列表页面
5.删除出版社信息
1.在HTML页面上添加操作按钮,根据出版社id进行删除
{% for foo in Publisher_list%} <tr> <td>{{ forloop.counter }}</td> <td>{{ foo.id }}</td> <td>{{ foo.name }}</td> <td> <a href="/delete_publisher/?id={{ foo.id }}">删除</a> <a href="/edit_publisher/?id={{ foo.id }}">编辑</a> </td> </tr> {% endfor %}
2.用ORM进行删除
def delete_publisher(request):
publisher_id = request.GET.get("id",None) #获取要删除的出版社的id
if publisher_id:
del_pub=models.Publisher.objects.get(id = publisher_id) #获取到对应的出版社对象
del_pub.delete()
return redirect("/publisher_list/")
else:
return HttpResponse("要删除的数据不存在!")
6.编辑出版社信息
1.同上删除在HTML上添加操作按钮,根据出版社id进行编辑
2.如果为GET请求则返回编辑页面和要更改的出版社相应信息,如果为POST请求则更改数据库内容
def edit_publisher(request):
edit_id = request.GET.get("id") #先获取要更改出版社id
if request.method == "GET":
publisher_obj = models.Publisher.objects.get(id=edit_id) #获取要编辑的出版社
return render(request, "edit_publisher.html", {"publisher": publisher_obj})
new_name = request.POST.get("publisherName", None) #编辑后的出版社名称
new_id = request.POST.get("publisherId", None) #编辑后的出版社id
if new_name:
publisher_obj = models.Publisher.objects.get(id=new_id) #获取要编辑的出版社
publisher_obj.name = new_name #更改数据库信息
publisher_obj.save() #保存更改
return redirect("/publisher_list/")
else:
return HttpResponse("出版社名字不能为空!")