2016-07-23 5 views
2

Ich las in einem Beitrag, dass es ideal ist, dass es ein guter Standard ist, eine Location-Header, verweist auf die URL der neuen Ressource (neu erstellt über POST). Mein Problem ist, ich weiß nicht, wie ich es einbeziehen soll.Fügen Sie einen Speicherort Kopfzeile in Django Rest Framework

Ich verwende eine klassenbasierte Ansichten, die die APIView und meinen Code in der Ansicht verwenden ist:

class ListArtists(APIView): 
    serializer_class = ArtistSerializer 
    def get(self, request, format=None): 
     _array = Artist.objects.filter() 
     serializer = self.serializer_class(_array, many=True) 
     if serializer.data: 
      _status = status.HTTP_200_OK 
     else: 
      _status = status.HTTP_204_NO_CONTENT 
     return Response(standardResponse(data=serializer.data), status=_status) 

    def post(self, request, format=None): 
     serializer = self.serializer_class(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(standardResponse(data=serializer.data), status=status.HTTP_201_CREATED) 
     else: 
      return Response(standardResponse(errors=serializer.errors)) 
artist = ListArtists.as_view() 

urls.py

from django.conf.urls import url, include 

from store import views 

urlpatterns = [ 
    url(r'^artists/', views.artist, name='artists-list'), 
] 

P. S.

Jedes Mal, wenn ich eine Anfrage mit meinem erweiterte REST-Client werfen dies die Antwort ist, dass ich wirklich:

Date: Sat, 23 Jul 2016 10:54:23 GMT 
Server: WSGIServer/0.1 Python/2.7.10 
Vary: Accept, Cookie 
X-Frame-Options: SAMEORIGIN 
Content-Type: application/json 
Allow: GET, POST, HEAD, OPTIONS 
+0

Sie können hinzufügen [Header zum Antwortobjekt] (https://docs.djangoproject.com/en/1.9/ref/request-response/#setting-header-fields), bevor es zurückgegeben wird. – solarissmoke

+0

Könnten Sie bitte einen Code angeben .. –

Antwort

3

Sie können add arbitrary headers zu einem Response Objekt, etwa so:

def post(self, request, format=None): 
    serializer = self.serializer_class(data=request.data) 
    if serializer.is_valid(): 
     obj = serializer.save() 
     response = Response(standardResponse(data=serializer.data), 
          status=status.HTTP_201_CREATED) 
     # If you have defined a get_absolute_url method on your model, then 
     # you can use that to get a URL for the new object 
     response['Location'] = obj.get_absolute_url() 
     return response 
+0

Jetzt ist dies die Antwort, die ich suche! Vielen Dank! –