一共有三个地方管着呢:
settings.py
'django.middleware.csrf.CsrfViewMiddleware',
html
{% csrf_token %}
如果是 $ajax 也得携带 csrfmiddlewaretoken
views.py
from django.views.decorators.csrf import csrf_exempt, csrf_protect
@csrf_exempt
@csrf_protect
使用情况:
-
正常开启 CSRF 防护
- settings.py 设置不变
- html 增加
{% csrf_token %}
-
取消表单 CSRF 防护
- html 删除
{% csrf_token %}
- views 增加 @csrf_exempt
- html 删除
-
取消整个网站 CSRF 防护
- settings.py 删除
django.middleware.csrf.CsrfViewMiddleware
- html 删除
{% csrf_token %}
- settings.py 删除
-
单独增加 CSRF 防护(settings.py 已注释 CsrfViewMiddleware)
- html 增加
{% csrf_token %}
- views 增加
@csrf_protect
- html 增加
-
当网页使用 Ajax 提交表单时,若需要开启 CSRF 防护,则需要携带 csrfmiddlewaretoken
<script>
function submitForm(){
var csrf = $('input[name="csrfmiddlewaretoken"]').val();
var user = $('#username').val();
var password = $('#password').val();
$.ajax({
url: '/index.html',
type: 'POST',
data: {'user': user,
'password': password,
'csrfmiddlewaretoken': csrf},
success: function(arg){
console.log(arg);
}
})
}
</script>