[DjangoRest + React]: Невозможно удалить элементы и проблемы с постингом (ошибка 403 и 301)
Я создаю очень простой сайт на react + django. Все шло хорошо, пока сегодня я не внес некоторые изменения в бэкенд и фронтенд, чтобы добавить третье приложение, которое отображает фиктивные картинки с описанием.
До этого момента я использовал axios для выполнения запросов get, post и delete без проблем. Я просто писал axios.post("api/", item) и он отправлял элемент, или axios.delete(api/{props.id}) и элемент удалялся.
Теперь ничего из этого не работает. Сначала я начал получать 403 ошибку. В ходе поиска неисправностей я попробовал добавить полный url, чтобы проверить, работает ли он. Сообщение сработало. axios.post("localhost:8000/api/", item) теперь публикует элемент. Дело в том, что когда я пытаюсь удалить - axios.delete(localhost:8000/api/{props.id}) - я получаю ошибку 301.
Кроме того, что я пинаю себя за то, что не сделал резервную копию раньше, что я могу сделать? Вот коды бэкенда и фронтенда
Frontend:
import React, { useEffect, useState } from "react";
import Header from "./UI/Header";
import NewTask from "./tasks/NewTask";
import TaskList from "./tasks/TaskList";
import axios from "axios";
import classes from "./ToDo.module.css";
function ToDo(props) {
const [taskList, setTaskList] = useState([]);
const refreshList = async () => {
await axios.get("todo/").then((res) => {
const filteredData = res.data
setTaskList(filteredData);
});
};
useEffect(() => refreshList, []);
const addTaskHandler = async (title, description) => {
let item = {
title: title,
description: description,
completed: false,
};
await axios
.post(`todo/`, item)
.then((res) => {refreshList()})
.catch((err) => console.log(err));
};
const onCompleteHandler = async (item, id) => {
console.log(id)
await axios
.post(`/todo/${id}`, item)
.then(() => refreshList());
console.log('ToDo')
}
const onDeleteHandler = async (id) => {
await axios
.delete(`/todo/${id}`)
.then(() => {
refreshList()
})
};
return (
<div className={classes[props.display]}>
<Header></Header>
<NewTask onAdd={addTaskHandler}></NewTask>
<TaskList list={taskList} onDelete={onDeleteHandler} onComplete={onCompleteHandler}></TaskList>
</div>
);
}
export default ToDo;
Бэкэнд:
settings.py
urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from web import views
from django.conf.urls.static import static
from django.conf import settings
router = routers.DefaultRouter()
router.register(r'cars', views.CarView, 'car')
router.register(r'todo', views.ToDoView, 'todo')
router.register(r'dummy', views.DummyView, 'dummy')
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router.urls)),
# path('/dummy/', './static/'),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
models.py
from django.db import models
# Create your models here.
class Car(models.Model):
brand = models.CharField(max_length=250)
make = models.CharField(max_length=250)
plate = models.CharField(max_length=10)
year = models.IntegerField()
def __str__(self):
return self.brand + " " + self.plate
class ToDo(models.Model):
title = models.CharField(max_length=250)
description = models.CharField(max_length=500)
completed = models.BooleanField(default=False)
def __str__(self):
return self.title
class Dummy(models.Model):
name = models.CharField(max_length=250)
description = models.CharField(max_length=500)
pic = models.ImageField(
upload_to= 'images/', default='images/default.jpg')
def __str__(self):
return self.name
serializers.py
from rest_framework import serializers
from .models import Car, ToDo, Dummy
class CarSerializer(serializers.ModelSerializer):
class Meta:
model = Car
fields = ('id', 'brand', 'make', 'plate', 'year')
class ToDoSerializer(serializers.ModelSerializer):
class Meta:
model = ToDo
fields = ('title', 'description', 'completed', 'id')
class DummyPicSerializer(serializers.ModelSerializer):
class Meta:
model = Dummy
fields = ('name', 'description', 'pic', 'id')
views.py
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework import viewsets
from .serializers import CarSerializer, ToDoSerializer, DummyPicSerializer
from .models import Car, ToDo, Dummy
# Create your views here.
def index(request):
return HttpResponse("Hello world. This works now!")
class CarView(viewsets.ModelViewSet):
serializer_class = CarSerializer
queryset = Car.objects.all()
class ToDoView(viewsets.ModelViewSet):
serializer_class = ToDoSerializer
queryset = ToDo.objects.all()
class DummyView(viewsets.ModelViewSet):
serializer_class = DummyPicSerializer
queryset = Dummy.objects.all()
Я только что удалил все свои миграции и базу данных и заново выполнил всю процедуру makemigrations-migrate в Django, и внезапно все заработало.
Возможно, это связано с тем, как он был перенесен ранее? Я никогда не узнаю.