CSRF(跨站请求伪造保护)令牌是一种安全机制,用于防止跨站请求伪造攻击。在 Django 应用中,CSRF 令牌通常用于验证请求是否由您的网站发出,以确保请求是合法的。
在 Django 中,CSRF 令牌通常通过 {% csrf_token %}
模板标签在 HTML 模板中生成。在发送 AJAX 请求时,您需要从这个标签获取 CSRF 令牌,并将其包含在请求头中。
在 HTML 模板中包含 CSRF 令牌
在 Django 模板中,确保在表单或 AJAX 请求发送前包含 CSRF 令牌:
<form method="post">{% csrf_token %}<!-- 表单内容 -->
</form>
在 Vue 组件中获取 CSRF 令牌
在 Vue 组件中,您可以使用 JavaScript 来获取 CSRF 令牌:
// 在 Vue 组件中
const csrfToken = document.querySelector('[name="csrf-token"]').getAttribute('content');
在 AJAX 请求中包含 CSRF 令牌
在发送 AJAX 请求时,将 CSRF 令牌包含在请求头中:
axios.post('/api/endpoint/', {// 请求体内容
}, {headers: {'Content-Type': 'application/json','X-CSRFToken': csrfToken}
})
.then(response => {// 处理响应
})
.catch(error => {// 处理错误
});
确保 CSRF 令牌正确传递
确保 CSRF 令牌在每个 AJAX 请求中正确传递,这有助于防止 CSRF 攻击,确保请求的安全性。
###5. 使用 Django REST framework
如果您使用的是 Django REST framework,您可以使用 rest_framework.authtoken
来处理 CSRF 令牌:
# views.py
from rest_framework.views import APIView
from rest_framework.authtoken.views import ObtainAuthTokenclass MyView(APIView):# 视图逻辑pass
# urls.py
# urls.py
from django.urls import path
from .views import MyViewurlpatterns = [path('api/endpoint/', MyView.as_view),path('api/auth-token/', ObtainAuthToken.as_view()),
]
在前端,可以使用 axios
的 auth
配置来自动处理 CSRF 令牌:
axios.defaults.xs.headers.common['X-CSRFToken'] = document.querySelector('[name="csrf-token"].getAttribute('content');