Ошибка Axios. При подключении к api возникает ошибка сети [закрыто]
Окружение: Mac OS m2.
Фреймворк: Django, Vue.
IDE : PyCharm.
Библиотека :
opencv-python==4.6.0.66. mediapipe-silicon==0.8.10.1.
keras==2.9.0. keras-tuner==1.1.3. tensorflow-macos==2.15.1.
numpy==1.23.3. scikit-learn==1.1.2. pandas==1.4.3.
matplotlib==3.6.0. seaborn==0.12.0. yellowbrick==1.5.
Django==4.2.13. djangorestframework==3.14.0.
django-cors-headers==3.13.0. django-extensions==3.2.1.
protobuf==3.20.
Здравствуйте, я изучаю использование чужого репозитория в отношении определения позы.
Я уже несколько недель не могу решить проблему, связанную с ошибкой сети axios.
- Проблема
Error:
m
code: "ERR_NETWORK"
config: {transitional: {…}, adapter: Array(3), transformRequest: Array(1), transformResponse: Array(1), timeout: 0, …}adapter: (3) ['xhr', 'http', 'fetch']data: FormData {}env: {FormData: ƒ, Blob: ƒ}headers: oe {Accept: 'application/json, text/plain, */*', Content-Type: undefined}maxBodyLength: -1maxContentLength: -1method: "post"timeout: 0transformRequest: [ƒ]transformResponse: [ƒ]transitional: {silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false}url: "http://127.0.0.1/api/video/upload?type=bicep_curl"validateStatus: ƒ (t)xsrfCookieName: "XSRF-TOKEN"xsrfHeaderName: "X-XSRF-TOKEN"[[Prototype]]: Object
message: "Network Error"
name: "AxiosError"
request: XMLHttpRequest {onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, …}onabort: ƒ ()onerror: ƒ ()onload: nullonloadend: ƒ p()onloadstart: nullonprogress: nullonreadystatechange: nullontimeout: ƒ ()readyState: 4response: ""responseText: ""responseType: ""responseURL: ""responseXML: nullstatus: 0statusText: ""timeout: 0upload: XMLHttpRequestUpload {onloadstart: null, onprogress: null, onabort: null, onerror: null, onload: null, …}withCredentials: false
[[Prototype]]: XMLHttpRequeststack: "AxiosError: Network Error\n at l.onerror (http://127.0.0.1:8000/static/assets/js/VideoStreaming-c1cd5834.js:3:6205)\n at Z.request (http://127.0.0.1:8000/static/assets/js/VideoStreaming-c1cd5834.js:5:1946)\n at async o (http://127.0.0.1:8000/static/assets/js/VideoStreaming-c1cd5834.js:6:9733)"
[[Prototype]]: Error
Сервер работает нормально, и в терминале нет ошибок.
Затем я успешно подключаюсь к веб-странице по адресу
.
http://127.0.0.1:8000/.
Но при нажатии кнопки "процесс", выполняющей функцию ядра, возникает сетевая ошибка.
Основная функция подключается к url, как
'http://127.0.0.1/api/video/upload?type=bicep_curl'.
и, возможно, из-за этого возникает сетевая ошибка.
Я подключаюсь к
http://127.0.0.1:8000/video
.
Затем, если я нажму на кнопку, маршрут подключения будет выглядеть следующим образом.
1. root/web/client/src/views/VideoStream.vue - кнопка
<button class="process-btn" @click="uploadToServer">
<span>Process!</span>
</button>
2. root/web/client/src/views/VideoStream.vue - def uploadToServer
const uploadToServer = async () => {
if (!submitData.value.videoFile) {
alert("No video selected");
return;
}
if (!submitData.value.exerciseType) {
alert("No exercise type selected");
return;
}
processedData.value = null;
try {
isProcessing.value = true;
const { data } = await axios.post(
`${apiUrl}/api/video/upload?type=${submitData.value.exerciseType}`,
{ file: submitData.value.videoFile },
{
headers: {
"Content-Type": "multipart/form-data",
},
}
);
processedData.value = data;
} catch (e) {
console.error("Error: ", e);
} finally {
isProcessing.value = false;
}
};
3. root/web/server/api/urls.py - urlpatterns
from django.urls import path, include
from . import views
urlpatterns = [
path("", views.api, name="api"),
path("video/", include("stream_video.urls")),
]
4. root/web/server/api/views.py - def api
from rest_framework.decorators import api_view
from rest_framework.response import Response
from datetime import datetime
@api_view(["GET"])
def api(request):
urls = {"name": "Quoc Bao", "dob": "10/10/2000", "time": datetime.now()}
return Response(urls)
5. root/web/server/stream_video/urls.py - urlpattern
from django.urls import path
from . import views
urlpatterns = [
path("stream", views.stream_video, name="stream"),
path("upload", views.upload_video, name="upload"),
]
6. root/web/server/stream_video/views.py - def upload_video
@api_view(["POST"])
@parser_classes([MultiPartParser])
def upload_video(request):
exercise_type = request.GET.get("type")
if not exercise_type:
return JsonResponse(
status=status.HTTP_400_BAD_REQUEST,
data={
"message": "Exercise type has not given",
},
)
try:
if request.method == "POST":
video = request.FILES["file"]
# Convert any video to .mp4
now = datetime.now()
now = int(now.strftime("%Y%m%d%H%M%S"))
name_to_save = f"video_{now}.mp4"
# Process and Saved Video
results, *other_data = exercise_detection(
video_file_path=video.temporary_file_path(),
video_name_to_save=name_to_save,
exercise_type=exercise_type,
rescale_percent=40,
)
# Convert images path to URL
host = request.build_absolute_uri("/")
for index, error in enumerate(results):
if error["frame"]:
results[index]["frame"] = host + f"static/images/{error['frame']}"
response_data = {
"type": exercise_type,
"processed": True,
"file_name": name_to_save,
"details": results,
}
# Handle others data
if exercise_type in ["squat", "lunge", "bicep_curl"]:
response_data["counter"] = other_data[0]
return JsonResponse(
status=status.HTTP_200_OK,
data=response_data,
)
except Exception as e:
print(f"Error Video Processing: {e}")
# traceback.print_exc()
return JsonResponse(
status=status.HTTP_400_BAD_REQUEST,
data={
"error": f"Error: {e}",
},
)
Я отправил письмо об ошибке оригинальному автору репозитория, но не получил ответа.
Я много искал и искал, потом нашел, что возможно это проблема связанная с CORS,
и в ответах мне сказали, что "Если вы напишите о корсхедере в настройках, то проблема решится".
но эта часть уже написана.
- Я уже написал о CORS в settings.py
ALLOWED_HOSTS = ["*"]
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
# Install libraries
"rest_framework",
"corsheaders",
"django_extensions",
# My Apps
"api.apps.ApiConfig",
"stream_video.apps.StreamVideoConfig",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
CORS_ALLOW_ALL_ORIGINS = True
Это мое предположение, Просматривая код, я обнаружил, что только 'corsheaders' подчеркнуты в IDE.
Я предполагаю, что может быть что-то не так, поэтому IDE не распознает корсхеды и считает это простой "опечаткой".
Есть ли кто-нибудь, кто может помочь с этим?
Это срочно, потому что это связано с моей дипломной работой в университете.
Вы можете проверить конкретный код в.
https://github.com/CreamMeatball/AI_SportFeedback.
и вы можете установить требования по 'requirements-mac-edit.txt' в mac.
.
Спасибо.