解析DRF请求主体:TypeError JSON对象必须是str,而不是' bytes'

时间:2018-03-09 06:26:08

标签: python django python-3.x django-rest-framework postman

当我尝试使用Django REST框架发送JSON时,我收到此错误:

  

/ usermanagement / user /
的TypeError   JSON对象必须是str,而不是' bytes'

我的帖子功能:

def post(self,request):
    user=json.loads(request.body)
    m_user= user.get('m_name', None)
    m_email = user.get('m_email', None)
    m_age=user.get('m_age', None)
    m_status = user.get('u_status_id', None)

    user = M_User(m_name=m_name, m_email=m_email, m_age=m_age, u_status_id=m_status)
    user.save()
    if user.save:
        user=M_User.objects.filter(m_user=m_user)
        serializer = M_Userserializer(user,many=True)
        context = {
            'success': "true",
            'user': serializer.data
        }
    elif not user.save:
        context={
        'success':"false"
        }
    else:
        context={
        'success':"false"
        }

    return Response(context)

1 个答案:

答案 0 :(得分:3)

在DRF中,您可以使用request.data代替request.body来获取已解析的请求:

user=request.data

在这种情况下,请求应为Request,而不是标准django HttpRequest。为确保这一点,您需要使用api_view装饰器:

from rest_framework.decorators import api_view

@api_view()
def post(self,request):
    user=request.data