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

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

<!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',
]

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值