【问题标题】:Serializer.is_valid() is always FalseSerializer.is_valid() 总是 False
【发布时间】:2016-11-13 16:07:38
【问题描述】:

我有以下Serializer 来处理用户:

class FriendSerializer(serializers.Serializer):

    login = serializers.CharField(max_length=15, required=True)
    password = serializers.CharField(max_length=15, required=True)
    mail = serializers.CharField(max_length=50, required=True)

目前,基于 Django REST 教程,我处理 POST 请求以注册新用户的视图是:

 @api_view(['POST'])
    def register_new_user(request):

        if request.method == 'POST':
            print('POST request !')

            stream = BytesIO(request.body)
            data = JSONParser().parse(stream)

            print(data)

            serializer = FriendSerializer(data=data)

            print(serializer.is_valid())

        else:
            print('Not a POST request!')

        return HttpResponse('Nothing')

因此,为了模拟带有 POST 请求的客户端,我使用以下几行代码:

import requests
import json

json_data = json.dumps({'login': 'mylogin', 'password': 'mypassword', 'mail': 'mymail'})
r = requests.post('http://127.0.0.1:8000/register_new_user', json=json_data)

然而,尽管print(data) 检索到,正如预期的那样,

{"login": "mylogin", "mail": "mymail", "password": "mypassword"} 

serializer.is_valid() 总是返回 False

我是否错过了对我的请求的任何处理?

编辑:

我通过serializer.errors获得了以下信息:

{'non_field_errors': ['Invalid data. Expected a dictionary, but got str.']}

【问题讨论】:

    标签: python json django django-rest-framework


    【解决方案1】:

    使用requests 库的json 选项时,您不必将字典转换为字符串。这应该有效:

    import requests
    
    data = {'login': 'mylogin', 'password': 'mypassword', 'mail': 'mymail'}
    r = requests.post('http://127.0.0.1:8000/register_new_user', json=data)
    

    【讨论】:

      【解决方案2】:

      解决方案是使用ast.literal_eval(request.data) 将字符串转换为字典。我使用request.data,而不是手动解析request.body

      但是,v1k45 的答案是最好的解决方案,因为我不需要在发送请求之前将我的 dict 转换为字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-20
        • 2021-11-05
        相关资源
        最近更新 更多