django - 在 Django Rest Framework 中包含位置 header

标签 django django-rest-framework

我在一篇文章中读到,最好包含一个指向新资源(通过 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 headersResponse 对象,如下所示:

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/

相关文章:

python - Django REST Framework 中的 self.get_serializer 方法来自哪里?

javascript - 开始为基于 Django REST API 的系统开发客户端(CORS 错误)?

python - Django rest framework 反向关系字段数据从 validated_data 中省略

django:CMS 的递归/树状 URL 映射?

python - Django 1.8.5 和 Celery 的 ImportError

python - (1054, "Unknown column ' 日期'在 'field list'")

django - 尽管状态为 200,但处理表单请求时出现异常

django-rest-framework - “QuerySet”对象没有属性 'pk'

mysql - 使用south迁移数据库表

python - 检查是否在 Django 模板继承中进行了身份验证