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,如下,后台也能正常打印出我们从表单中获取到的变量的值