405 «Метод POST не разрешен» в DEST-среде Django - PullRequest
0 голосов
/ 03 декабря 2018

Я использую Django REST framework для реализации методов Get, Post api, и я получил GET для правильной работы.Однако при отправке почтового запроса отображается ошибка 405 ниже.Что мне здесь не хватает?

405 Method Not Allowed
{"detail":"Method \"POST\" not allowed."}

Отправка этого тела с помощью почтового метода

{
    "title": "abc"
    "artist": "abc"
}

У меня есть

api / urls.py

from django.contrib import admin
from django.urls import path, re_path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('api/(?P<version>(v1|v2))/', include('music.urls'))
]

music / urls.py

from django.urls import path
from .views import ListSongsView


urlpatterns = [
    path('songs/', ListSongsView.as_view(), name="songs-all")
]

music / views.py

from rest_framework import generics
from .models import Songs
from .serializers import SongsSerializer


class ListSongsView(generics.ListAPIView):
    """
    Provides a get method handler.
    """
    queryset = Songs.objects.all()
    serializer_class = SongsSerializer

music / serializers.py

from rest_framework import serializers
from .models import Songs


class SongsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Songs
        fields = ("title", "artist")

models.py

from django.db import models

class Songs(models.Model):
    # song title
    title = models.CharField(max_length=255, null=False)
    # name of artist or group/band
    artist = models.CharField(max_length=255, null=False)

    def __str__(self):
        return "{} - {}".format(self.title, self.artist)

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Good Day

generics.ListAPIView не допускается POST, это только GET.Если вы хотите разрешить GET и POST.Вы можете использовать generics.ListCreateAPIView вот документация

для вашей музыки / views.py

from rest_framework import generics
from .models import Songs
from .serializers import SongsSerializer


class ListSongsView(generics.ListCreateAPIView):
    """
    Provides a get method handler.
    """
    queryset = Songs.objects.all()
    serializer_class = SongsSerializer
0 голосов
/ 03 декабря 2018
class ListSongsView(generics.ListCreateAPIView):
    """
    Provides a get method handler.
    """
    queryset = Songs.objects.all()
    serializer_class = SongsSerializer

вам нужно ListCreateAPIView, поскольку ListView имеет только метод GET и не допускает метод POST

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...