【问题标题】:Asymmetric nature of GET and POST in a Django REST framework SerializerDjango REST 框架序列化器中 GET 和 POST 的不对称性质
【发布时间】:2014-07-12 14:51:48
【问题描述】:

我正在尝试制作允许 GET 和 POST 的模型和序列化程序

GET 将允许客户端查看所有用户的列表,并将显示名字、姓氏等信息,但不显示 access_token

但是,POST 只需要 access_token 并且可以从 Facebook 提取所有信息,例如名字、姓氏等。

如何在序列化程序中表达和编码 get 和 post 的这种不对称性质

serializers.py

class UserSerializer(serializers.HyperlinkedModelSerializer):
    """
    User Serializer
    """

    class Meta:
        model = models.User
        fields = ('id', 'username', 'first_name', 'last_name', 'image_url', 'activities', 'url', 'access_token')

views.py

class UserViewSet(viewsets.ModelViewSet):
    """
    List all users - this should be taken out as it would never be used in app, and we wont want this as well, as app can only view friend details
    Gives details of an user - this should stay
    """
    queryset = models.User.objects.all()

    serializer_class = UserSerializer

【问题讨论】:

  • 您提到,POST 可以从 Facebook 提取所有信息,例如名字、姓氏等。但据我了解,当您想获取信息时不要发布
  • 谢谢,我的意思是,只要服务器(API 端点生成器)在 /user 处接收到通过 POST 传递给它的 access_token,它就可以使用它自己从 facebook 检索所有信息
  • 不幸的是,POST 用于在 RESTful API 中创建。因此,我建议,如果您想从 facebook 检索所有信息而不创建任何新内容,请发出 GET 请求,并将 access_token 传递给查询参数或 HTTP 标头

标签: django django-rest-framework


【解决方案1】:

以下任何选项:

  • 在您不希望用户在创建时提供的字段上使用 read_only
  • 覆盖get_queryset 并为GETPOST 返回不同的序列化程序。
  • ViewSet 上显式编写retrieve()create() 方法。

但是,POST 只需要 access_token 并且可以从 Facebook 提取所有信息,例如名字、姓氏等。

您可能需要在序列化程序上使用自定义 restore_object 来提取该信息。

【讨论】:

  • 非常感谢汤姆,这对您有帮助。我也从文档中发现了同样的情况。另外,感谢 DRF 的神奇之处。在这里发布了一个相关的问题:stackoverflow.com/questions/24738438/…
猜你喜欢
  • 2017-06-26
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 2015-10-29
  • 2020-05-08
  • 1970-01-01
相关资源
最近更新 更多