【问题标题】:Getting { "user": [ "This field is required."] } on Postman everttime I try to post每次我尝试发帖时在 Postman 上获取 { "user": ["This field is required."] }
【发布时间】:2019-07-26 12:40:34
【问题描述】:

我正在尝试使用 Django rest 框架上的 createAPIView 创建一个注册 api。每次我在 Postman 上发布数据时,它都会返回上述错误,尽管当我在浏览器中运行它时它会得到响应。此外,图像字段导致邮递员的原始数据出现问题。我尝试了很多东西,但似乎没有任何效果。我该怎么办?

序列化器

 class UserSerializer(serializers.ModelSerializer):
     email = serializers.EmailField(
        required=True,
        validators=[UniqueValidator(queryset=User.objects.all())]
        )
    password = serializers.CharField(min_length=8)

     class Meta:
        model = User
        fields = ('id', 'first_name','last_name', 'email', 'username','password')
        extra_kwargs = {'user': {'required': False}}



class UserProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    code = serializers.CharField(read_only=True)
    avatar = serializers.FileField(use_url=False)


    class Meta:
        model = UserProfile
        fields = '__all__'
        extra_kwargs = {'user': {'required': False}}

    def create(self, validated_data):
        user_data = validated_data.pop('user',None)
        image = validated_data.pop('avatar')
        upr=UserProfile.objects.create(user=user_data, image=image**validated_data)
        return upr

观看次数

  class UserCreate(generics.ListCreateAPIView):

    serializer_class = UserProfileSerializer
    user_serializer = UserSerializer
    queryset = UserProfile.objects.all()
    parser_classes = (FormParser,MultiPartParser,FileUploadParser)

    def post(self, request):
        serializer = UserProfileSerializer(data=request.data)
        print(request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data,     status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

【问题讨论】:

  • 不确定这里出了什么问题,但就您的图像问题而言:我认为这与在 Postman 中使用错误的编码类型有关。通过表单上传数据时,需要添加enctype="multipart/form-data"。 Django 管理表单会为您处理这个问题。 (最好谷歌这个以获得更好的信息)。下次,如果可以避免的话,请不要将两个不同的问题放在一个问题中。也比“它不起作用”或“它很时髦”更清楚。
  • 我没有使用 html 表单。我是 REST 的新手。你能告诉我我必须在哪里提到这一点吗?
  • 就您的真实问题而言:邮递员和您的浏览器将使用不同的用户会话。您在两个应用程序中都有登录用户吗?另外,你是不是不小心把 GET 参数放在了 body 中,或者 POST 参数放在了 GET 参数区域? (在 Postman 中它们是两种不同的东西)。
  • 我认为用户没有在任何地方登录,我正在使用 Post on Postman。
  • 在 Postman 中,每个请求选项卡中都有一个“标题”部分,您可以在其中添加自定义编码。在“语法”下碰巧有一个示例:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type 此外,我没有足够的经验或消息灵通,无法知道您需要或正在做什么。我希望我已经为您提供了一些句柄来帮助您进一步搜索。

标签: django rest api django-rest-framework


【解决方案1】:

您正在尝试在未先创建用户的情况下发送配置文件数据。并且必须将配置文件对象应用于已经存在的用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2022-11-07
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多