为什么图像上传到django rest框架端点返回0 NO RESPONSE?

时间:2014-11-12 19:41:23

标签: python django http django-rest-framework

我在Django Rest Framework中创建了端点,我希望只有经过身份验证的用户才能创建和更改数据。我正在使用令牌认证。

当我尝试更新Testik实例的profile_picture(通过PATCH方法)提供正确的凭据时。 (授权=令牌xxxxxxxxxxxxx),它工作,profile_picture更新,状态代码200返回。

但是每当凭据错误或丢失时,它都不会返回错误401(未授权),我在django终端输出中看到错误:“PATCH / api / testik / 1 HTTP / 1.1”401 59“但我得到了”状态 0 NO RESPONSE“

所以我有这个模型:

from django.db import models

# Create your models here.
class Testik(models.Model):
    email = models.EmailField('email address', unique=True, db_index=True)
    first_name = models.CharField(max_length=50, blank=True)

    profile_picture = models.ImageField(upload_to='photos/testik',blank=True)

与相关的序列化器:

from models import Testik
from rest_framework import serializers

class TestikSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Testik
        fields = ('url', 'profile_picture','first_name')

和这个ViewSet:

from django.shortcuts import render
from serializers import TestikSerializer
from models import Testik
from rest_framework import mixins,permissions,viewsets,parsers

# Create your views here.

class TestikViewSet(mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.ListModelMixin,
                   mixins.CreateModelMixin,
                   mixins.DestroyModelMixin,
                   viewsets.GenericViewSet):
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    serializer_class = (TestikSerializer)
    queryset = Testik.objects.filter()
    parser_classes = (parsers.MultiPartParser,parsers.JSONParser)

有没有人知道我做错了什么或者http请求(可能是特定内容类型/我试过多部分或者什么)我应该使用吗?

1 个答案:

答案 0 :(得分:0)

对于文件上传,您需要使用multipart/form-data内容类型。


此外,PATCH动词通常不支持文件上传。您需要使用PUT(替换)或POST(创建)来处理它。