我在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请求(可能是特定内容类型/我试过多部分或者什么)我应该使用吗?
答案 0 :(得分:0)
对于文件上传,您需要使用multipart/form-data
内容类型。
此外,PATCH
动词通常不支持文件上传。您需要使用PUT
(替换)或POST
(创建)来处理它。