Нерегулярная произвольная ошибка Cross-Origin request blocked в Django на хостинге Ionos
В настоящее время я делаю проект для школы, где я сделал викторину. Викторина должна оцениваться во фронт-энде, который работает совершенно нормально, и после этого он должен отправить информацию в бэкэнд. Бэкэнд должен сохранять данные в базе данных и после этого отправлять информацию обратно на фронтэнд. На передней панели должно появиться сообщение с некоторыми подробностями о том, как вы сдали экзамен по сравнению со всеми остальными, информация из базы данных. Итак, самое странное во всем этом то, что иногда это работает, а иногда нет... Если я тестирую его на локальном хосте, код работает отлично, ошибка возникает только на сервере Ionos (я заключил контракт на хостинг, поэтому у меня нет доступа к консоли...). Вот, кстати, ссылка на мой сайт: https://tor-netzwerk-seminarfach2024.com/ .Если вы нажмете в верхнем левом углу, а затем на кнопку викторины, вы попадете на викторину. Если я смотрю на консоль и сетевую аналитику и мне "повезло", что произошла ошибка, то появляется следующее сообщение:
Заблокирован кросс-оригинальный запрос: Правило того же источника запрещает чтение внешний ресурс на https://api. tor-netzwerk-seminarfach2024. com/apache-test/. (Причина: CORS-запрос не сработал).
https://api.tor-netzwerk-seminarfach2024.com/apache-test/ является моим бэкендом, а https://tor-netzwerk-seminarfach2024.com/ - моим фронтендом. Файл настроек в Django не является проблемой. Чтобы еще раз прояснить ситуацию, ошибка возникает не всегда. Иногда приходится снова заходить на сайт и делать это еще один или два раза, пока не появится ошибка...
Если я посмотрю на сетевую аналитику, то увижу, что запрос клиента работает как обычно, но поле ответа от сервера совершенно пустое. Перейдем к самой странной части: Данные действительно сохраняются в базе данных, просто иногда нет ответа? Это было бы слишком много для минимального рабочего продукта, но вот самый важный код - если вы хотите протестировать его, вы можете просто взять ссылку на мой сайт:https://tor-netzwerk-seminarfach2024.com/
--Серверная сторона с Django---
from rest_framework.response import Response
from .models import Lead
import json
from .serializer import TestingSerializer
def updateDigits():
leadObj = Lead.objects.all()
currentScore = leadObj[0].sumScore; currentRequests = leadObj[0].sumRequests
valueBtnOne = leadObj[0].buttonOne; valueBtnTwo = leadObj[0].buttonTwo;
valueBtnThree = leadObj[0].buttonThree; valueBtnFour = leadObj[0].buttonFour;
valueBtnFive = leadObj[0].buttonFive; valueBtnSix = leadObj[0].buttonSix;
valueBtnSeven = leadObj[0].buttonSeven; valueBtnEight = leadObj[0].buttonEight;
valueBtnNine = leadObj[0].buttonNine;
return [valueBtnOne,valueBtnTwo,valueBtnThree,valueBtnFour,valueBtnFive,valueBtnSix,valueBtnSeven,valueBtnEight,valueBtnNine,currentScore,currentRequests]
@api_view(["POST"])
def home(request):
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
result = body["Result"]
isItRight = body["wichOnesRight"]
ip_adress = get_client_ip(request)
queryset = Lead.objects.all()
if Lead.objects.all().exists():
currentValues = updateDigits()
queryset.update(
sumScore = result + currentValues[9],
sumRequests = 1 + currentValues[10],
buttonOne = currentValues[0] + isItRight[0],
buttonTwo = currentValues[1] + isItRight[1],
buttonThree = currentValues[2] + isItRight[2],
buttonFour = currentValues[3] + isItRight[3],
buttonFive = currentValues[4] + isItRight[4],
buttonSix = currentValues[5] + isItRight[5],
buttonSeven = currentValues[6] + isItRight[6],
buttonEight = currentValues[7] + isItRight[7],
buttonNine = currentValues[8] + isItRight[8],
)
currentValues = updateDigits()
else:
obj = Lead()
obj.save()
serializer = TestingSerializer(queryset[0], many =False)
return Response({**serializer.data, "myResult": result})
моя модель Django:
from django.db import models
class Lead(models.Model):
sumScore = models.IntegerField(default=0)
sumRequests = models.IntegerField(default=0)
buttonOne = models.IntegerField(default=0)
buttonTwo = models.IntegerField(default=0)
buttonThree = models.IntegerField(default=0)
buttonFour = models.IntegerField(default=0)
buttonFive = models.IntegerField(default=0)
buttonSix = models.IntegerField(default=0)
buttonSeven = models.IntegerField(default=0)
buttonEight = models.IntegerField(default=0)
buttonNine = models.IntegerField(default=0)
сериализатор просто сериализует _ _ все _ _ ...
---Front end with React---
function evaluateAndCheckQuiz(){
let countNotChosen = howManyNotChosen()
if(countNotChosen){ answerQuestions(countNotChosen); return }
let points = evaluateQuiz()
document.getElementById("scoreText").style.display = "block"
document.getElementById("scoreNumber").textContent = points
return points
}
--Вызов sendAndGetQuizAverage с evaluateAndCheckQuiz в качестве параметра--
function sendAndGetQuizAverage(points){
const myPostRequest = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({"Result":points, "wichOnesRight": wichOnesRight}),
};
let data
fetch('https://api.tor-netzwerk-seminarfach2024.com/apache-test/', myPostRequest).then(
(response) => data = response.json()).then(
(data) => {showResultAnalyse(data)})
}
function showResultAnalyse(data){
console.log(data)
let averageScore = (data["sumScore"] / data["sumRequests"]).toFixed(2)
let myResult = data["myResult"]
changeLinksToStatistics([
data["buttonOne"],data["buttonTwo"],data["buttonThree"],
data["buttonFour"],data["buttonFive"],data["buttonSix"],
data["buttonSeven"],data["buttonEight"],data["buttonNine"]
],
data["sumRequests"]
)
swal(
{
text:`${checkWichText(myResult,averageScore,data["sumRequests"] )}`,
icon: myResult > averageScore ?"success": "error",
button:"Oki doki",
}
);
}