Django(7)-Get请求和Post请求

Django(1)-简介

Django(2)-创建项目及默认项目目录结构介绍

Django(3)-配置文件详解

Django(4)-URL和视图

Django(5)-路由配置实例

Django(6)-请求及响应

Django(7)-Get请求和Post请求

Django(8)-设计模式

Django(9)-模板层简介与入门实例

Django(10)-模板层的变量和标签

Django(11)-模板层的过滤器和继承

Django(12)-url反向解析

Django(13)-静态文件

Django(14)-应用及分布式路由

Django(15)-模型层及ORM介绍

Django(16)-ORM基础字段及选项

Django(17)-ORM创建数据

Django(18)-ORM常用的查询函数详解及实例演示

Django(19)-ORM条件查询

Django(20)-ORM更新操作及实例演示

Django(21)-ORM删除操作及实例演示

Django(22)-ORM中F对象和Q对象

Django(23)-ORM聚合查询和原生数据库操作

Django(24)-admin后台管理设置步骤以及常见样式详解

Django实战技巧(1)-开发测试生产环境配置切换处理技巧

Django实战技巧(2)-git代码仓分支管理技巧

Django实战技巧(3)-项目配置

1、定义

  • 无论是Get还是Post请求,统一都由视图函数接受,通过判断request.method区分具体的请求动作
  • 式样:
if reqeust.method=="GET":
	处理GET请求的业务逻辑
elif request.mentod=="POST":
	处理Post请求的业务逻辑
else:
	其他请求业务逻辑

2、GET处理

  • GET请求动作,一般用于向服务器获取数据
  • 能够产生GET请求的场景:
    • 浏览器地址输入URL,回车
    • <a href=“地址?参数=值&参数=值”>
    • form 表单中的method为get,一般来说form表单用来发送post请求,如果非要用form发送get也是可以的
    • GET请求方式中,如果有数据需要传递给服务器,通常会用查询字符串传递,注意不要传递敏感数据
    • URL格式:xxx?参数名1=值1&参数名2=值2…
    • 服务端从字符串拿到参数的方式,注意一下,如果参数中同一个参数名时用力多次,并且在处理请求的时候多个值都需要,此时需要使用getlist来获取所有的,这种场景通常用在多选框的时候
request.GET[“参数名”]
request.GET.get("参数名","默认值")
request.GET.getlist("参数名”)

GET请求获取参数实例:
路由设置如下:
在这里插入图片描述
视图函数实现如下:

from django.http import HttpResponse,HttpResponseBadRequest


def test_get_post(request):
    if request.method=="GET":
        print("a:",request.GET["a"])
        print("b:",request.GET.get("b"))
        print("c:",request.GET.get("c","ccc"))
        print("b:",request.GET.getlist("b"))
    elif request.method=="POST":
        pass
    else:
        pass
    return HttpResponse("-- test get post is ok --")

在浏览器打开:http://127.0.0.1:8080/test_get_post?a=200&b=100&c=300&b=400
在pycharm后台可以看到如下打印:这里验证了如果同一个参数名在参数中出现多次,当使用get方法获取时只能获取到最后一个值,使用getlist方法是可以将所以值获取到从而可以再做进一步的处理
在这里插入图片描述

3、POST处理

  • Post请求动作,一般用于向服务器提交大量、隐私数据
  • 客户端通过表单等POST请求将数据传递给服务器,如:
<form method='post' action='/login">
	姓名:<input type='text' name='username'>
	<input type='submit' value='登录'>
</form>
  • 服务器端接受数据
    • 通过request.method来判断是否为post请求,如:
if request.method == "POST":
	处理POSt请求的数据并响应
else:
	处理非POSt请求的响应
  • 使用post方式获取参数的方式与get的方式基本一致,只不过从POST属性中获取
request.POST[“参数名”]
request.POST.get("参数名","默认值")
request.POST.getlist("参数名”)

实例演示POST处理:
首先路由设计如下:
在这里插入图片描述
视图函数实现如下,其中get请求为返回一个简单的html网页,此网页提供一个输入框和一个提交按钮,用来发送post请求,post处理在后台打印username的变量值

from django.http import HttpResponse,HttpResponseBadRequest


def test_get_post(request):
    if request.method=="GET":
        html="""
        <form method='post' action='/test_get_post'>
            用户名:<input type='text' name='username'>
            <input type='submit' value='提交'>
        </form>
        """
        return HttpResponse(html)
    elif request.method=="POST":
        print("username:",request.POST["username"])
        print("username:",request.POST.get("username"))
        return HttpResponse("post is ok")
    else:
        pass
    return HttpResponse("-- test get post is ok --")

然后在浏览器打开http://127.0.0.1:8080/test_get_post页面,输入用户名,比如redrose2100,然后点提交按钮
在这里插入图片描述
如果没有修改过配置文件,则应该会出现如下界面,这是Django做的一种安全防护(CSRF攻击)
在这里插入图片描述
这里暂时先把csrf防护关闭掉,如下将此行配置代码注释掉即可
在这里插入图片描述
然后在浏览器重新刷页面,重新输入用户名,点击提交按钮
在这里插入图片描述
此时页面已经OK,如下,后台也能正常打印出我们从表单中获取到的变量的值
在这里插入图片描述


版权声明:本文为redrose2100原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。