根据Django docs,Django应该默认使用中间件启用csrf令牌验证。当我查看我的设置文件时,我确实看到了包含的中间件。
但是,当我使用Ajax执行没有csrf令牌的post请求时,Django将允许它。它是否应该返回错误,说csrf令牌无效?我看到很多人无法验证他们的csrf令牌的问题,但我无法将其验证为无效。
这是我的Ajax post函数(我使用js从输入中收集数据,并将其传递给此函数):
function ajaxPost(url, data, success) {
fetch(url, {
method: 'POST', // or 'PUT'
body: JSON.stringify(data),
headers: new Headers({
'Content-Type': 'application/json'
})
}).then(res => res.json())
.then(response => {
if (response.status !== success) {
//errors
}
updateView(response);
})
.catch(error => console.error('Error:', error))
}
这是我的观点功能:
@api_view(['POST'])
# API endpoint for posting bulk properties
def bulk(request):
new_properties = []
if request.method == 'POST':
for obj in request.data:
discipline = Discipline.objects.get(pk=obj['discipline.id'])
root_function = Function.objects.get(pk=obj['root_function'])
new_property = Property(name=obj['name'], value=obj['value'], unit=obj['unit'],
discipline_id=discipline)
new_property.save()
new_property.function.add(root_function)
new_properties.append(new_property)
new_properties = json.loads(serializers.serialize('json', new_properties))
return JsonResponse({'status': 201, 'new_properties': new_properties})
答案 0 :(得分:2)
假设api_view
是来自django-rest-framework的那个,它会禁用该视图的CSRF保护。
这是因为API端点经常用于不具备CSRF令牌的外部请求;在这些情况下,没有必要检查它。