Загрузка изображений во фреймворке Django-React возвращает ошибку 403
Я создаю приложение на Django-React, которое требует, чтобы я загрузил несколько изображений в папку. Когда я нажимаю на кнопку загрузки, я получаю ошибку 403 на запрос. Если посмотреть в консоль, то в ответе говорится: "CSRF Failed: CSRF-токен отсутствует или неверен". Я пробовал добавить декоратор @csrf_exempt над функцией в views.py, но это не помогает. Вот выдержка из соответствующего кода:
settings.py
MEDIA_URL = '/upload/'
MEDIA_ROOT = os.path.join(BASE_DIR, '..', 'frontend', 'build', 'static', 'assets')
urls.py
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, re_path
from django.views.generic import TemplateView
from woundapp import views
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
path('upload/', views.upload_images),
path('admin/', admin.site.urls),
...
re_path(r".*", TemplateView.as_view(template_name="index.html")),
]
urlpatterns = format_suffix_patterns(urlpatterns)
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
models.py
from django.db import models
class Image(models.Model):
image_url = models.ImageField(upload_to='unprocessed/')
serializers.py
from rest_framework import serializers
from .models import Image
class ImageSerializer(serializers.ModelSerializer):
class Meta:
model = Image
fields = [
'image_url'
]
views.py
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
import os
from .models import Image
from .serializers import ImageSerializer
import requests
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
@api_view(['POST'])
@csrf_exempt
def upload_images(request, format=None):
if request.method == 'POST':
print(request.data.get("images"))
serializer = ImageSerializer(data=request.data, many=True)
if serializer.is_valid():
serializer.save()
images = request.data.get("images")
Image.objects.create(image=images)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Однако, если я вручную загружаю изображения из http://127.0.0.1:8000/admin/, это работает для меня.
Может кто-нибудь подскажет мне, если я делаю что-то не так?
Заранее спасибо.
Я видел некоторые сообщения, предлагающие использовать декоратор @csrf_exempt, и я попробовал, но это не работает.
Думаю, вам нужно добавить корень папки image следующим образом...
MEDIA_URL = '/upload/'
MEDIA_ROOT = os.path.join(BASE_DIR, '..', 'upload', 'frontend', 'build', 'static', 'assets')