Нерегулярная произвольная ошибка 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",
        }
    );
}
Вернуться на верх