Django - React - Axios: Данные не сохраняются в базе данных
Я пытаюсь создавать продукты через компонент react js, используя axios post request.
В журнале django я вижу, что запрос OPTION получает код состояния 200, но данные не сохраняются в БД.
при выполнении этого через postman все работает нормально, что заставляет меня думать, что проблема в запросе axios.
Заранее спасибо.
models.py
class Product(models.Model):
title = models.CharField(max_length=32)
notes = models.TextField()
picture = models.ImageField(upload_to='product_images', null=True, blank=True)
amount = models.IntegerField(default=0)
@receiver(post_save, sender='product.Transaction')
def update_amount(sender, **kwargs):
product = Product.objects.get(title=kwargs['instance'].product)
if kwargs['instance'].transaction_type == 'IN':
product.amount += kwargs['instance'].amount
product.save()
else:
if product.amount - kwargs['instance'].amount > 0:
product.amount = product.amount - kwargs['instance'].amount
product.save()
def __str__(self):
return self.title
views.py
class ProductCreateView(generics.CreateAPIView):
serializer_class = ProductSerilizer
permission_classes = (permissions.IsAuthenticated,)
queryset = Product.objects.all()
serializers.py
class ProductSerilizer(ModelSerializer):
class Meta:
model = Product
fields = '__all__'
settings.py
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'product',
'rest_framework',
'corsheaders',
'rest_framework.authtoken'
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
],
'DATETIME_FORMAT': '%d-%m-%Y',
}
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_ALL_ORIGINS = True
AddProducts.js
Я смог это выяснить.
Проблемы были связаны с CORS-заголовками. Я должен был установить заголовки, которые разрешены API.
Добавив следующий код в мой settings.py в django backend, он разрешил запрос, отправленный с фронтенда:
CORS_ALLOW_HEADERS = [
"accept",
"accept-encoding",
"authorization",
"content-type",
"dnt",
"origin",
"user-agent",
"x-csrftoken",
"x-requested-with",
]