У меня есть форма:
<form action="{% url "some_url" %}" method="post">
{% csrf_token %}
<input type="text">Text Input
<button type="submit">Submit</button>
</form>
Который отправляется через AJAX:
$(function () {
$('form').submit(function (e) {
e.preventDefault();
$.post($(this).attr('action'), $(this).serialize(), function (response) {
console.log(response);
});
});
});
URL-адреса к этому представлению:
class SomeView(View):
def post(self, request, *args, **kwargs):
context = dict(**some_data)
rendered_html = render_to_string('some_template.html', context, RequestContext(self.request))
return JsonResponse(dict(html=rendered_html))
Всеэто работает.Проблема в том, что он также работает, когда токен CSRF не отправляется, я получаю точно такой же успешный ответ:
$.post($(this).attr('action'), function (response) {
console.log(response);
});
Я ожидаю, что возникнет какая-то ошибка, потому что токен CSRF отсутствует.
Чтобы указать очевидное: CsrfViewMiddleware
находится в пределах MIDDLEWARE_CLASSES
.
Явное использование csrf_token
приводит к тому же результату, когда токен не отправляется:
method_decorator(csrf_protect)
def dispatch(self, request, *args, **kwargs):
return super(SomeView, self).dispatch(request, *args, **kwargs)
Что я могу сделать, чтобы обеспечить его проверку?