[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, и внезапно все заработало.

Возможно, это связано с тем, как он был перенесен ранее? Я никогда не узнаю.

Вернуться на верх