【问题标题】:Django-rest framework structure not capturing post or put requestDjango-rest 框架结构未捕获 post 或 put 请求
【发布时间】:2015-09-12 21:42:59
【问题描述】:

我正在使用 django-rest-framework 制作JSON-API。目前 API 适用于 GET 和 DELETE 请求,但不适用于 POST 和 PUT 请求。不知何故,post 或 put 参数没有被捕获。这是我的序列化程序和我的观点。

序列化器.py

class SnippetSerializer(serializers.HyperlinkedModelSerializer):
   attribute = serializers.SerializerMethodField()

   class Meta:
      model = Snippet
      fields = ('id','attribute')

   def get_attribute(self, obj): 
      return {
         'code': obj.code, 
       } 

views.py

from resources.snippets.models import Snippet
from .serializers import SnippetSerializer
from rest_framework import viewsets

class SnippetViewSet(viewsets.ModelViewSet):
   queryset = Snippet.objects.all()
   serializer_class = SnippetSerializer 

当我使用发布的参数 - http://127.0.0.1:8000/snippet/, { 'code' : 'testtest'} 发出 http 请求时,api 会创建一个没有发布参数的新 sn-p 实例。同样,当我向http://127.0.0.1:8000/snippet/1 发出 PUT 请求时,数据不会使用 put 参数进行更新。

我错过了什么吗?

【问题讨论】:

  • 发送post/put 请求时收到的消息/错误是什么?是否弹出任何特定错误?
  • 它没有显示任何错误。正如@spectras 所说,我没有在序列化程序中包含参数,这导致每当我发出 POST 或 PUT 请求时它们都会被忽略

标签: python django django-views django-rest-framework django-serializer


【解决方案1】:

您的序列化程序没有可写字段。

fields = ('id','attribute')

你在那里定义它只有两个属性,第一个是 id,第二个是只读属性。写入时,两者都在逻辑上被忽略(id 被 url 覆盖,只读是,好吧,只读)。

如果您希望能够编写其他字段,则必须将它们也包括在内。如果您在GET 对象时仍然不希望它们输出,您可以将它们添加为只写字段:

    fields = ('id', 'attribute', 'foo', 'bar')
    extra_kwargs = {
        'foo': {'write_only': True},
        'bar': {'write_only': True},
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 2018-12-20
    • 2019-03-24
    • 1970-01-01
    • 2012-09-02
    • 2023-03-16
    • 2016-04-07
    • 2021-05-06
    相关资源
    最近更新 更多