【学习笔记】【django】POST传递参数表单提交报403错误

1.使用django框架,在views.py定义了一个方法

def test(request):
    str = request.method
    return HttpResponse(str)

2.新加url拦截post/,在urls.py中增加代码

from views import test
urlpatterns = [
    url(r'^post/$',test)
]

3.使用chrome浏览器postman插件模拟POST方式传递参数,发现报错403,切换使用GET方式即可正常获取接口返回值。问题现象如下

错误原因:

Django要求POST提交时候需要进行CSRF验证

CSRF表示django全局发送post请求均需要字符串验证
功能:防止跨站请求伪造的功能
工作原理:客户端访问服务器端,在服务器端正常返回给客户端数据的时候,额外返回给客户端一段字符串,等到客户端下次访问服务器端时,服务器端会到客户端查找先前返回的字符串,如果找到则继续,找不到就拒绝。
访问流程:客户端-》URL路由系统 - 》 CSRF -》视图函数

4.解决方案

(1)方法一

关闭全局验证,将settings.py里csrf中间件注释掉即可,如下图

(2)方法二

做POST提交时候需要加上csrf_token(就是一个随机码)来完成csrf验证,需要在客户端页面的post表单内添加:{% csrf_token %}。示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>POST Params</title>
</head>
<body>
<form method="post" >
    {%csrf_token%}//csrf_token用来验证
    UserName:<input type="text" name="username"/>
    Password:<input type="password" name="password"/>
    <input type="submit" value="Submit">
</form>
</body>
</html>

(3)方法三

@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

@csrf_exempt
def test(request):
    str = request.method
    return HttpResponse(str)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值