Я пытаюсь создать службу отдыха, совместимую с JSON API, используя JSON API Django Rest Framework:
https://django -rest-framework-json-api.readthedocs.io / о / стабильный / index.html
Я думаю, что застрял на уровне Django Rest Framework, но я не уверен.
Я думаю, что запрос GET работает, но POST не потому, что я получаю этот ответ:
$ curl -H 'Accept: application/vnd.api+json; indent=2' -X POST http://localhost:8000/greeters/
{
"errors": [
{
"detail": "Method \"POST\" not allowed.",
"source": {
"pointer": "/data"
},
"status": "405"
}
]
}
Но GET в порядке:
$ curl -H 'Accept: application/vnd.api+json; indent=2' http://localhost:8000/greeters/
{
"data": {}
}
Я просмотрел другие посты и учебные пособия, и мне кажется, что я пропустил что-то в своем коде, что не выскочило на меня. Надеюсь, он появится у кого-то, кто имеет больше опыта работы с Djang и Django Rest Framework.
Спасибо, что уделили время:)
Вот мой код:
my_project / urls.py
from django.conf.urls import include
from django.contrib import admin
from django.urls import path, re_path
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^greeters/', include('greeter.urls')),
]
привратник / urls.py
from django.conf.urls import url, include
from rest_framework import routers
from .views import GreeterViewSet
ROUTER = routers.DefaultRouter()
ROUTER.register(r'^', GreeterViewSet)
urlpatterns = [
url(r'^', include(ROUTER.urls)),
]
привратник / views.py
from rest_framework import viewsets
from .models import Greeter
from .serializers import GreeterSerializer
class GreeterViewSet(viewsets.ModelViewSet):
"""API endpoints for Greeter"""
queryset = Greeter.objects.all()
serializer_class = GreeterSerializer
# I've tried adding these methods in but none of it worked
#def perform_create(self, serializer):
# serializer.save(owner=self.request.user)
#def create(self, request):
# print('#########create')
#def post(self, request):
# print('#########post')
привратник / serializers.py
from rest_framework import serializers
from .models import Greeter
class GreeterSerializer(serializers.HyperlinkedModelSerializer):
"""Define Greeter serializer"""
class Meta:
model = Greeter
fields = ('message')
привратник / models.py
from django.db import models
class Greeter(models.Model):
"""Define Greeter model"""
id = models.CharField(
primary_key=True,
max_length=200
)
message = models.CharField(max_length=200)
Обновление:
Спасибо за помощь. Это привело меня к решению.
Я удалил greeter/urls.py
и переместил все конфигурации URL в my_project/urls.py
.
from django.conf.urls import include
from django.contrib import admin
from django.urls import path, re_path
from rest_framework import routers
from greeter.views import GreeterViewSet
ROUTER = routers.DefaultRouter()
ROUTER.register(r'greeters', GreeterViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^', include(ROUTER.urls)),
]
Это работает, но я все же хотел бы понять, как вставить весь код URL приветствующего в файл внутри папки приветствия, например greeter/urls.py
.
Я открыл отдельный вопрос, чтобы получить руководство по этому вопросу, чтобы пометить его как ответивший.
В Django, как вы храните конфигурации URL-адресов модуля внутри модуля?
Еще раз спасибо за помощь:)