Не могу понять почему json отправляет пустой запрос.
javascript:
var tryout = new XMLHttpRequest();
const form = document.querySelector("form")
tryout.open('POST', '/signup/', false);
tryout.setRequestHeader('x-csrf-token', form.querySelector("input[type=hidden]").value);
tryout.setRequestHeader("Content-Type", "application/json");
tryout.setRequestHeader("Accept", "application/json");
const body = {
'csrfmiddlewaretoken': form.querySelector("input[type=hidden]").value,
'username': form.querySelector(".test").value,
'checker': ''
}
tryout.send(JSON.stringify(body));
html:
{% load static %}
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document reg</title>
<link rel="stylesheet" href="{% static 'main/css/style.css' %}">
<link rel="stylesheet" href="{% static 'main/css/reg_form.css' %}">
</head>
<body>
<div class="container__regestration">
<form method="post" class="container_reg_form" novalidate >
{% csrf_token %}
<!-- {{form.non_field_errors}}
{% for f in form %}
<div>{{ f.label }}:</div>
<div>{{ f }}</div>
{% endfor %} -->
<input type="text" name="username" value="admin" class = "test">
<input type="email" name="email">
<input type="password" name="password1">
<input type="password" name="password2">
<button type="sumbit">Отправить</button>
<div>{{error}}</div>
<div>{{error_username}}</div>
<div>{{error_email}}</div>
</form>
</div>
<script src="{% static 'main/js/script.js' %}"></script>
</body>
</html>
функция которая отображает:
from .models import CustomUser
from django.shortcuts import render, redirect
def Reg_page (request):
if request.user.is_authenticated:
return redirect('account', request.user.slug)
error = ""
error_username = ""
error_email = ""
if request.method == 'POST':
if 'checker' in request.POST:
print('work')
form = CustomUserCreationFrom(request.POST)
email = request.POST.get('email')
nickname = request.POST.get('username')
if CustomUser.objects.filter(username=nickname).exists():
error_username = "Данное имя уже занято"
if CustomUser.objects.filter(email=email).exists():
error_email = "Данный адрес электронной почты уже занято"
if (request.POST.get('username').strip() == "") or (request.POST.get('email').strip() == ""):
error = "Заполните все поля"
if re.search('[а-яА-Я]', nickname):
error_username = "Кирилицу нельзя"
# Если форма коректна, то она сохраняется
elif form.is_valid():
formsv = form.save()
login(request, formsv)
request.user.slug = request.user.username
request.user.save()
return redirect('accountREDIR')
elif error_email == "" and error_username == "":
error = "Неизвестная нам ошибка"
form = CustomUserCreationFrom()
content = {
'error': error,
'error_username': error_username,
'error_email': error_email
}
return render(request, 'main/registration_form.html', content)
При попытке вывести этот запрос через консоль пайтона он выводит это:
Forbidden (CSRF token missing.): /signup/
[24/Aug/2022 22:04:35] "POST /signup/ HTTP/1.1" 403 2548
А также request.body и request.POST пустые:
b'' //request.body
<QueryDict: {}> //request.POST
Ожидал я увидеть примерно такой результат:
b'csrfmiddlewaretoken=J5xIjlWgbSpYF8PcDWwibHCJfIrzESR7X6pLHDJpYI32j4i2VyHbwW0wbfMGj96f&username=admin&checker=' //request.body
<QueryDict: {'csrfmiddlewaretoken': ['J5xIjlWgbSpYF8PcDWwibHCJfIrzESR7X6pLHDJpYI32j4i2VyHbwW0wbfMGj96f'], 'username': ['admin'], ''cheker': ['']}> //request.POST
Мне надо делать проверку никнейма до того как он нажмет на кнопку после ввода. Пока что я эту функцию не добавил, хочу понять почему не отправляется запрос.