2016-08-03 4 views
3

Ich arbeite an Mezzanine Rest API und fügen Sie einige weitere Ansichten hinzu, um in der Lage zu sein, leicht zu arbeiten. Ich codiert eine Ansicht und machte seine Serializer aber, wenn sie von Postbote zu schlagen versuchen, erhalte ich Fehler nicht 404Warum wird meine Ansicht im Django-Rest-Framework nicht gefunden?

Views.py

@csrf_exempt 
@api_view(['POST']) 
def create_site_record(request): 
    serializer = SiteModelSerializer(data=request.data) 
    if serializer.is_valid(): 
     serializer.save() 
     return Response(serializer.data, status=status.HTTP_201_CREATED) 

serializers.py

class SiteModelSerializer(serializers.Serializer): 
    title = serializers.CharField(required=True, max_length=100) 
    tagline = serializers.CharField(required=True, max_length=100) 
    domain = serializers.CharField(required=True, max_length=100) 

    def create(self, validated_data): 
     return Site.objects.create(**validated_data) 

urls.py

router = routers.DefaultRouter(trailing_slash=False) 
router.register(r'users', UserViewSet) 
router.register(r'pages', PageViewSet) 
router.register(r'posts', PostViewSet) 
router.register(r'categories', CategoryViewSet) 
# router.register(r'create_site', create_site_record, 'sitess') 
router.register(r'site', SiteViewSet, SiteViewSet.as_view({'get': 'retrieve'})) 


urlpatterns = [ 
    url(r'^create/(?P<pk>[0-9]+)$', create_site_record), # I have tried registering this view in router also but no luck 
    url(r'^', include(router.urls)), 
    url(r'^docs/', include('rest_framework_swagger.urls')), 
    url(r'^oauth2/', include('oauth2_provider.urls', namespace='oauth2_provider')), 
    url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')), 
] 
gefunden

Ich versuche diesen Endpunkt zu erreichen : http://localhost:8000/api/create_site/ mit Nutzlast: { "title": "Test", "tagling": "sdhjshjd", "domain": "test:8000" }

Erste Fehler: Not Found: /api/create_site/ Was mache ich falsch?

+2

Die URL ist falsch –

Antwort

2

Es sieht aus wie ein Problem mit Ihrem URL-Pfad. Die Zeichenerfassung für einen create-Endpunkt ist nicht erforderlich, da dies normalerweise für die Referenzierung eines vorhandenen Objekts verwendet wird. Versuchen Sie, den Pfad zu url(r'^create/$', create_site_record) zu ändern, und senden Sie die POST-Anforderung an http://localhost:8000/api/create/.

+0

Noch Fehler immer: 'Nicht gefunden:/create_site/ [03/Aug/2016 09.04.56] "POST/create_site/HTTP/1.1" 404 1697' –

+0

Seit dem Mezzanine-Projekt und ich laufe auf diesem Mezzanine-Rest-API-Framework und sein registriertes URL-Muster hat 'url ("^api/", include (" mezzanine_api.urls "))' –

+0

Ah ok, dann war der api-Teil korrekt. Ich hatte versehentlich create_site in der URL. Das aktualisierte sollte funktionieren. – rurp