【问题标题】:Why image upload to django rest framework endpoint returns 0 NO RESPONSE?为什么图像上传到 django rest 框架端点返回 0 NO RESPONSE?
【发布时间】:2015-01-09 18:55:24
【问题描述】:

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

当我尝试更新 Testik 实例的 profile_picture 时(通过 PATCH 方法)提供正确的凭据。 (Authorization = Token xxxxxxxxxxxxx),成功了,profile_picture更新,返回状态码200。

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

所以我有这个模型:

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请求(可能是特定的内容类型/我尝试了多部分或其他东西)?

【问题讨论】:

    标签: python django http django-rest-framework


    【解决方案1】:

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


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

    【讨论】:

    • Content-type 设置为 multipart/form-data 和 PUT 的行为方式相同,它可能是别的东西
    • 0 NO RESPONSE 在哪里找到?我们的发现是浏览器奇怪地支持PATCH,尤其是在混合文件上传时。我还要确保在TestikSerializer 中将profile_picture 作为文件字段专门列出。
    • 我正在使用邮递员应用程序测试我的 restapis,现在它只是说:“无法得到任何响应这似乎是连接到 127.0.0.1:8000/api/testik/1 时出错。响应状态为 0。查看W3C XMLHttpRequest Level 2 规范了解有关何时发生这种情况的更多详细信息。”但我可以在终端输出中看到 django 引发错误 401。我认为 profile_picture 字段设置正确,因为当我提供正确的授权凭据时,profile_picture 被正确保存。
    • 堆栈中间的某些东西完全有可能会干扰响应并在它到达邮递员之前将其丢弃。
    • 尝试使用httpie 之类的东西并使用-p HhBb 转储完整的标头。
    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2018-10-31
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多