我在一篇文章中读到,最好包含一个指向新资源(通过 POST 新创建的)URL 的 Location header ,这是一个很好的标准。我的问题是我不知道如何包含它。
我正在使用 APIView 使用基于类的 View , View 中的代码是:
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()
url.py
from django.conf.urls import url, include
from store import views
urlpatterns = [
url(r'^artists/', views.artist, name='artists-list'),
]
附注
每次我使用高级 REST 客户端发出请求时,我都会收到以下响应:
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
最佳答案
您可以add arbitrary headers到 Response
对象,如下所示:
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
关于django - 在 Django Rest Framework 中包含位置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38540979/