from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt
def my_view(request):
if request.method == 'PUT':
# 处理PUT请求逻辑
pass
elif request.method == 'DELETE':
# 处理DELETE请求逻辑
pass
else:
# 处理GET请求逻辑
pass
使用csrf_exempt
装饰器后,可以绕过Django的CSRF保护,使得前端可以使用PUT和DELETE方法进行请求。
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
$.ajax({
url: "your-url",
data: {...},
type: "POST",
method: "PUT",
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
},
success: function(data){
console.log(data);
},
error: function(xhr, errmsg, err){
console.log(xhr.status + ": " + xhr.responseText);
}
});
在前端Ajax请求中,通过设置type
和method
分别指定了请求类型和方法。同时还需要添加beforeSend
回调函数,在其中设置CSRF Token头部,以确保可以正常进行请求。