Dea*_*ada 6 django django-rest-framework
我在一篇文章中读到,理想的做法是包含一个 Location 标头,该标头指向新资源的 URL(通过 POST 新创建)。我的问题是我不知道如何包含它。
我使用 APIView 使用基于类的视图,视图中的代码是:
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()
Run Code Online (Sandbox Code Playgroud)
网址.py
from django.conf.urls import url, include
from store import views
urlpatterns = [
url(r'^artists/', views.artist, name='artists-list'),
]
Run Code Online (Sandbox Code Playgroud)
聚苯乙烯
每次我使用 Advanced REST Client 发出请求时,我收到的响应如下:
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
Run Code Online (Sandbox Code Playgroud)
您可以向对象添加任意标题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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5779 次 |
最近记录: |