我目前正在構建一個 Django React 應用程式,我希望用戶能夠從前端創建模型(串列)的實體。我試圖構建后端,但是當我在 Postman 上嘗試 url:http://localhost:8000/api/listings/create 時出現錯誤:“detail”:“不允許使用方法“POST”。”
此外,如果我改用“/listings/admin/create”,我不會收到此錯誤。
我的模型:
class Listing(models.Model):
artist = models.ForeignKey(Artist, on_delete=models.DO_NOTHING)
slug = models.CharField(max_length=200, unique=True)
title = models.CharField(max_length=150)
photo_main = models.ImageField(upload_to='photos/%Y/%m/%d/', default='photos/default.jpg')
description = models.TextField(blank=True)
def __str__(self):
return self.title
我的觀點 :
class CreateListingView(APIView):
parser_classes = [MultiPartParser, FormParser]
queryset = Listing.objects.all()
serializer_class = ListingSerializer
def post(self, request, format=None):
print(request.data)
serializer = ListingSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_200_OK)
else:
return Response(serializer.data,status=status.HTTP_400_BAD_REQUEST)
我的應用網址:
from django.urls import path
from .views import ListingsView, ListingView, SearchView,CreateListingView
app_name = 'listings'
urlpatterns = [
path('', ListingsView.as_view(),name='listings'),
path('search', SearchView.as_view(),name='listingssearc'),
path('<slug>', ListingView.as_view(),name='listingsdetails'),
path('create', CreateListingView.as_view(),name='listingscreate')
]
我的專案網址:
urlpatterns = [
path('api-auth/', include('rest_framework.urls')),
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('api/accounts/', include('accounts.urls')),
path('api/artists/', include('artists.urls')),
path('api/listings/', include('listings.urls', namespace='listings')),
path('api/contact/', include('contact.urls')),
path('admin/', admin.site.urls),
] static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns = [re_path(r'^.*', TemplateView.as_view(template_name='index.html'))]
那么我做錯了什么?我不明白為什么會收到 405 錯誤。
謝謝閱讀!
uj5u.com熱心網友回復:
一個接一個地嘗試 url 模式。
在您的 urlpatterns 中,您在前面的行中捕獲對“create”的呼叫作為 slug:
urlpatterns = [
path('', ListingsView.as_view(),name='listings'),
path('search', SearchView.as_view(),name='listingssearc'),
path('<slug>', ListingView.as_view(),name='listingsdetails'),
path('create', CreateListingView.as_view(),name='listingscreate')
]
所以它將列出顯然不允許發布請求的詳細資訊。
將其更改為:
urlpatterns = [
path('', ListingsView.as_view(),name='listings'),
path('search', SearchView.as_view(),name='listingssearc'),
path('create', CreateListingView.as_view(),name='listingscreate'),
path('<slug>', ListingView.as_view(),name='listingsdetails')
]
那么只有在它有一個不是搜索或創建的 slug 時才會被最后一行捕獲。
uj5u.com熱心網友回復:
它應該是這樣的:
class CreateListingView(APIView):
def post(self, request, format=None):
print(request.data)
serializer = ListingSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_200_OK)
else:
return Response(serializer.data,status=status.HTTP_400_BAD_REQUEST)
如需參考,請參閱此 drf APIView
uj5u.com熱心網友回復:
你可以試試換
class CreateListingView(APIView):
到
class CreateListingView(generics.ListCreateAPIView)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/422726.html
標籤:
上一篇:無法從用戶那里獲取日歷API事件
