我是Python的新手,在Django中使用rest框架和使用mysql构建数据库来构建API。 我使用过滤器查询获取用户信息对象但返回的数组。
在Login API中我的代码是:
is_valid_user = users.objects.filter(email=req_email, password=req_password)
serializer = usersSerializer(is_valid_user,many=True)
if is_valid_user:
response = {
'message': 'success',
'code': 1,
'data':serializer.data
else:
response = {
'message': 'User not found',
'code': 0,
}
return Response(response)
我的usersSerializer类:
class usersSerializer(serializers.ModelSerializer):
class Meta:
model = users
fields = ('uid', 'first_name', 'last_name', 'email', 'gender')
对于此代码响应是:
{
"message": "success",
"code": 1,
"data": [
{
"uid": 6,
"first_name": "anuj",
"last_name": "sharma",
"email": "anujs1991@gmail.com",
"gender": "0"
}
]
}
但为此,我不想要data
的数组。
预期结果应为:
{
"message": "success",
"code": 1,
"data": {
"uid": 6,
"first_name": "anuj",
"last_name": "sharma",
"email": "anujs1991@gmail.com",
"gender": "0"
}
}
请帮助我。
答案 0 :(得分:1)
您的问题下的评论应该指向另一种解决方案。在这里,我想解释一下,为什么你要获得一个数组,而不是一个对象。
在这一行:
isValidUser = users.objects.filter(email=req_email, password=req_password)
您使用filter
方法,该方法可能返回多于1个结果(或无结果)。无论结果数量多少,您总会得到一个数组(python中的列表)。 filter()
方法返回新的 QuerySet 。
如果要显式检索单个结果,并且模型类中有唯一字段,则应使用方法get()
,该方法不返回QuerySet,而是返回对象。
因此,如果我们将字段email
设置为唯一,那么您可以这样做:
isValidUser = users.objects.get(email=req_email)
如果有一个可以匹配的条目,那将返回一个对象。
此外,遵循Python的命名约定并使用snake case命名变量是一个好习惯:
is_valid_user
而不是
isValidUser