Django中ajax提交post请求踩到的坑

在写后台代码时,准备从表格中删除一条记录,通过ajax发送post请求。

知道post请求在开启csrf验证的情况下,需要提交csrf参数。

通常如果是form表单,只要在表单中写上{{ csrf_token }} (DTL语言) 或 {{ csrf_input }} (Jinja2),就可以了。通过ajax直接提交post请求,需要手动把csrf参数加上。

本来以为同cookie名称一致就可以了,如下:

Django中ajax提交post请求踩到的坑

结果一直报403错误。

通过源码追查原因,在django.middleware.csrf.CsrfViewMiddleware的process_view中发现以下代码:

Django中ajax提交post请求踩到的坑

直接通过POST提交,csrftoken的键名称为csrfmiddlewaretoken,而不是csrftoken。还可以通过设置HTTP的header参数来上传,有兴趣的可以自己试试看。

最后,代码稍为改下就可以了:

Django中ajax提交post请求踩到的坑