Почему функции ничего не возращает

Бывает, что python-функция ничего не возращает (то есть сначало все работает нормально, потом по какой-то причине запрос не доходит, а потом опять все нормально), то есть это доходит до питона из js, но назад ничего не приходит.

python:

def test(request):
	
	response = request.POST
	bombs = int(response['bombs_counts'])


	r = generate_map(bombs)

	return JsonResponse(r)

html:

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
</head>
<body>
	<div class="form_container">
	<div id="message"></div>
	
	<form id="form" onsubmit="f(this)">
		{% csrf_token %}
		<input type="text" name="bet">
		<input type="text" name="bombs_counts">
		<input type="checkbox" name="x2">X2
		<input type="checkbox" name="x3">X3
		<input type="checkbox" name="x4">X4
		<input type="submit" name="send" value="Отправить">
	</form>
</div>
<script>


function f(el){
	$.ajax({
		url: 'test/',
		method: 'POST',
		dataType: 'html',
		data: $(el).serialize(),
		success: function(data){
			
			alert(data);
		}
	});
};
</script>
</body>
</html>

А что в DevTools —> Network тогда?

В Network идет запрос на test/, тогда вся необходимая информация приходит, но иногда запрос не идет и опять вылетает ошибка:

Exception occurred during processing of request from ('127.0.0.1', 63270)
Traceback (most recent call last):
  File "C:\Users\drygo\AppData\Local\Programs\Python\Python39\lib\socketserver.py", line 683, in process_request_thread
    self.finish_request(request, client_address)
  File "C:\Users\drygo\AppData\Local\Programs\Python\Python39\lib\socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Users\drygo\AppData\Local\Programs\Python\Python39\lib\socketserver.py", line 747, in __init__
    self.handle()
  File "C:\Users\drygo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\servers\basehttp.py", line 174, in handle
    self.handle_one_request()
  File "C:\Users\drygo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\servers\basehttp.py", line 182, in handle_one_request
    self.raw_requestline = self.rfile.readline(65537)
  File "C:\Users\drygo\AppData\Local\Programs\Python\Python39\lib\socket.py", line 704, in readinto
    return self._sock.recv_into(b)
ConnectionAbortedError: [WinError 10053] Программа на вашем хост-компьютере разорвала установленное подключение

:man_shrugging: похоже на какие-то проблемы с настройкой Джанговского сервера, ОС и т.д.
Может какие-то недоработки локального Джанговского сервера, он только для использования во время разработки предназначен.

А если попробовать поменять порт запуска? Может помочь?

Вряд ли.

А в Network какой статус когда ошибка?

Если проблема только с ajax, то гугл советует проверить таймаут. По идее его и так не должно быть по умолчанию, но на всякий случай можно попробовать указать большое значение.

    $.ajax({
        timeout: 10000,
        ...

Нмчего там нет, просто на милиссекунды появляется запрос на test/. И это все как-то странно, иногда запросы идет, но функция ничего не возвращает( хотя в консоли все отображается), а иногда вылетает ошибка, о которой писал выше.

он не должен пропадать, результат в любом случае должен быть там.
Может фильтр стоит какой-нибудь


это когда запрос доходит, а когда нет, то просто на милиссекунды появляется запрос на test/.


Еще есть вот такие ошибки, не знаю влияет ли как-то

То есть в теории на хосте все будет работать нормально?

Если проблема в этом, то да.

Я попробовал сменить версию питона на 3.7.0 (до этого была 3.9.5), ошибка ушла, но теперь появилась ошибка Broken pipe from ('127.0.0.1', 50513), я почитал про нее, и вроде бы это никак не сказывается на работоспособности, но почему-то нет ридеректа, хотя вход происходит.

def log_hand(request):
    
    try:
        username = request.POST['username']
        password = request.POST['password']
        
        user = authenticate(username=username, password=password)
        
        if user is not None:
            if user.is_active:
                login(request, user)
                
                return HttpResponseRedirect('/main/')
            else:
                
            	return JsonResponse({'v': 'no'})
        else:
            
            return JsonResponse({'v': 'no'})
    except:
        
        return JsonResponse({'v': 'no'})

Это наверно разные случаи.
Вон похожие жалобы, что нет редиректа
python - Broken pipe from ('127.0.0.1', 57124) - Stack Overflow
reactjs - Post request in Django results in broken pipe - Stack Overflow

Хотя конечно может это и не связано с редиректом.

Что в ответе на запрос в DevTools —> Network, код ответа 200 или 302?

Это строка точно вызывается?

Я бы добавил вывод в лог/консоль для отладки.

В ответе как обычно ничего.

На строке и происходит ошибка.

А если я в теории попробую переустановить виндовс или поставить линукс, это поможет?)

Смотря что проблему вызывает :man_shrugging:

Вообще сейчас модно запускать это всё через Docker, чтоб меньше зависеть от своей ОС и ее настроек.
Типа такого (РНР): Re: Где найти хороший источник по установке и конфигурации LAMP?

Не знаю как это в питоне/джанго делают. Например, на оф. сайте докера есть какой-то пример
Quickstart: Compose and Django | Docker Documentation

Вообщем установил я линукс). Пока ошибок нет, посмотрим, что будет дальше)
Как можно проверять в js, есть ли в запросе какая-то информация. То есть у меня есть форма, которая отправляет запрос на url, а там, если юзер есть то происходит вход и ридерект, а если нет, то возврашается JsonResponse, и как можно сделать js функцию, которая обрабатывает это и говорит, что пароль неправильный?

Так data ж результат

console.log(data.v)

Только тут непонятно почему при успешном логине оно редиректит, а не JSON отправляет. Страница в браузере не поменяется от редиректа запросов отправленных JS.
Тут наверно лучше всегда JSON отдавать с описанием результата операции, и проверив его делать что надо через JS. window.location.href = ... чтоб перейти на другую страницу из JS.

Это если использовать ajax (потому что редиректа почему-то не происходило в питоне), я его убрал и просто использую action, поэтому не получится использовать success

Так а причем тогда JS. Если браузер отправляет запрос при отправке обычной формы, то через JS запрос не перехватить, просто новая страница загрузится.

видимо он происходил, но