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("出版社名字不能为空!")

 

 

 
posted @ 2020-04-23 22:13  刘老中医写代码  阅读(147)  评论(0编辑  收藏  举报