您的位置:首页 > 编程语言 > Go语言

django跨站请求伪造(csrf)解决方法

2019-06-18 19:07 127 查看

我们写一个简单的前端网页

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改密码</title>
</head>
<body>
<form method="post" action="/user/updatepwd/">
用户名<input type="text" name="username">
旧电话<input type="text" name="oldpho">
新电话<input type="text" name="newpho">
<input type="submit" value="确认">
</form>
</body>
</html>

再写相应的视图函数

def updatepwd(request):
from user.models import UserInfo
if request.method=='GET':
return render(request,'updatepwd.html')
else:
username=request.POST.get('username')
oldpho=request.POST.get('oldpho')
newpho=request.POST.get('newpho')
try:
data=UserInfo.objects.get(name=username,phone=oldpho)
print(data)
except:
return HttpResponse('错误')
else:
# user=UserInfo()
# user.phone=newpho
# user.save()
UserInfo.objects.update(
phone=newpho
)
return HttpResponse('ok')

写好URL开启后端服务器
浏览器访问此页面,可以正常访问

填入数据提交,遇到了这个报错

这是因为第一次访问是get请求,第二次是post请求需要发送数据,而django自带防御跨站请求伪造组织这次请求,有两种解决方式。
第一种在前端代码中加入

{%csrf_token%}

第二种在setting.py文件中关闭CSRF防御,如下代码注释掉此中间件

MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

注意第二种方法一般只用于调试。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: