django - 如何将用户 ID 传递到带有请求数据的序列化程序中?

标签 django django-rest-framework

我有一个由 oauth2_provider.ext.rest_framework.OAuth2Authentication 验证的项目.请求 header 中有一个用于身份验证和识别的 token 。我认为在处理创建操作时,我不应该在请求数据中明确包含用户 ID。但是序列化程序需要用户信息来创建新实例。所以我在序列化程序中包含了一个 user_id 字段,并将值放入 request.data验证后输入字典。

好吗?有没有更好的办法?

序列化程序.py

class serializer(serializers.Serializer):
    user = UserSerializer(read_only=True)
    user_id = serializers.UUIDField(write_only=True)
    content = serializers.CharField()

View .py
class CommentList(generics.ListCreateAPIView):
    def create(self, request, *args, **kwargs):
        request.data['user_id'] = request.user.id
        return super(CommentList, self).create(request)

最佳答案

覆盖更干净create(validated_data)在您的序列化程序中:

class CommentSerializer(serializers.Serializer):
    ...

    def create(self, validated_data):
      user = self.context['request'].user
      comment = Comment.objects.create(
         user=user, 
         **validated_data
      )
      return comment

http://www.django-rest-framework.org/api-guide/serializers/#saving-instances

然后你不需要自定义你的 View ,你可以只使用通用 View 。

关于django - 如何将用户 ID 传递到带有请求数据的序列化程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42914596/

相关文章:

python - Django REST 错误返回对象列表

django - 如何使 Django REST JWT 身份验证扩展到多个 Web 服务器?

python - 带有 DRF 错误用户名字段的 Djoser 是必需的

python - Django + Testypie 问题 : AppRegistryNotReadyException

python - Django Rest Framework 中的批量更新数据

django - 在 django 查询集中使用 __gte

django - 在 Django 处理大请求时维持 http 连接(20 分钟以上)

Django rest 框架 - 在模型的保存方法中引发了 ValidationError。如何将错误传递给http响应

python - 如何过滤数据使用等于或大于 url 中的条件?

django - 事务管理的 block 以挂起的 COMMIT/ROLLBACK 结束