美文网首页
Django csrf机制设置csrftoken

Django csrf机制设置csrftoken

作者: NIGangJun | 来源:发表于2019-08-16 14:13 被阅读0次

    最近使用vue+django做一个项目

    问题:

    前端发get请求正常,发post请求的时候报错(403 Forbidden (CSRF token missing or incorrect.))

    上度娘看了看,怎么都是注掉'django.middleware.csrf.CsrfViewMiddleware'?

    解决

    找了一圈没有找到自己想要的答案,回过头看看错误信息,意思好像是我缺少csrf token
    那这个csrf token在哪里?再上度娘看看,理解一下答案

    • 如果仅是django项目,只需要在表单里加一个{% csrf_token %}(本文不涉及)
    • 前后分离,需要前端发请求的时候在请求头里添加'X-CSRFToken'

    按照描述的答案,'X-CSRFToken'对应的csrftoken是需要在cookie里取的。由于这个cookie是服务器传过来的, 那么剩下的就简单了。

    # 设置csrftoken的方式有好几种,我采用了装饰器的方法,方便简单。
    from django.http import JsonResponse
    from django.views.decorators.csrf import ensure_csrf_cookie
    
    @ensure_csrf_cookie
    def demo_data_post(request):
        return JsonResponse({"msg": "OK"})
    

    前端调用这个view提供的接口,在cookie里就多了一个'csrftoken'的值。然后拿着这个再做post请求,就不会出现上面的问题。

    最后总结理解一下这个方法的实现过程:

    • 前端发起请求(比如登录验证或者普通get请求),django通过ensure_csrf_cookie装饰器让客户端cookie存一个'csrftoken'
    • 要求类似post请求(涉及到数据相关的请求),就需要前端发请求的时候,在请求头里加入X-CSRFToken: csrftoken

    相关文章

      网友评论

          本文标题:Django csrf机制设置csrftoken

          本文链接:https://www.haomeiwen.com/subject/larfsctx.html