1. Вам нужно в Вашего шаблона, который выводится на страницу, включить тег {% csrf token %}
2. Также нужно, чтобы при загрузке страницы срабатывал вот этот скрипт:
(function(G) {
"use strict";
var $ = G.jQuery;
function csrfSafeMethod(method) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
function sameOrigin(url) {
var host = document.location.host, // host + port
protocol = document.location.protocol,
sr_origin = '//' + host,
origin = protocol + sr_origin;
// Allow absolute or scheme relative URLs to same origin
return (url == origin || url.slice(0, origin.length + 1) == origin
+ '/')
|| (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin
+ '/') ||
!(/^(\/\/|http:|https:).*/.test(url));
}
$.ajaxSetup({
beforeSend : function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
}
}
});
}(this));
3. Комментировать middleware csrf_token не надо. Вы уж будьте последовательны - если делаете CSRF, так делайте до конца.
4. Ваш вид лучше написать так:
@csrf_protect #Защищать так защищать
def email_check(request):
if request.method == "POST":
post_email = request.POST.get("email")
user_by_email = User.objects.get(email=post_email)
if user_by_email is not None: #Такой email уже использован
return HttpResponse(json.dumps({"success": False, "error": "Пользователь с таким email уже зарегистрирован"}), content_type="application/json")
else: #E-mail свободен
return HttpResponse(json.dumps({"success": True}), "application/json")