如何摆脱来自 flask/mongoengine 的 json 响应中的数据类型
How to get rid of the datatype in json response from flask/mongoengine
我正在使用 flask 开发应用程序后端
当我 return 响应时,一些数据类型与值一起包含在其中。这是 return 文档值
的一些逻辑示例代码
def single_user(user_id):
user = users.read(user_id)
if user:
return {
'success': True,
'user': user,
}, 200
return {
'success': False,
'message': 'User not found',
}, 404
我的用户模型就是这样
from datetime import datetime
import mongoengine as me
class User(me.Document):
phone = me.StringField()
email = me.EmailField()
password = me.StringField()
accountType = me.StringField()
createdAt = me.DateTimeField(default=datetime.now())
updatedAt = me.DateTimeField(default=datetime.now())
profil = me.EmbeddedDocumentField(Profil)
meta = {
'collection': 'users',
'strict': False,
}
这里是响应的示例输出
{
"success": true,
"user": {
"_id": {
"$oid": "5dc968e2e50cca5af0ba50cc"
},
"createdAt": {
"$date": 1573491186501
},
"profil": {
"checked": false,
"followerList": [
{
"$oid": "5dc96268788964480d6a2a8a"
}
],
"followingList": [],
"playpoint": 15
},
"updatedAt": {
"$date": 1573491186501
}
}
}
这很好,但是有没有办法从输出中删除“$oid”和“$date”并只获取值?
我认为这是 python 的事情,因为当我尝试从 nodejs 等效后端提供这些数据时,我只有 "id"、"createdAt" 和 [=34 中的值=].
编辑:这将是所需的输出
{
"success": true,
"user": {
"_id": "5dc968e2e50cca5af0ba50cc",
"createdAt": 1573491186501,
"profil": {
"checked": false,
"followerList": [
"5dc96268788964480d6a2a8a"
],
"followingList": [],
"playpoint": 15
},
"updatedAt": 1573491186501
}
}
与 MongoEngine 的工作方式有关。这就是返回这些字段的原因。解决它的唯一方法是自己映射字段。
def single_user(user_id):
user = users.read(user_id)
if user:
mappedUser = {
'_id': user['_id']['$oid'],
'createdAt': user['createdAt']['$date'],
...
}
return {
'success': True,
'user': mappedUser,
}, 200
return {
'success': False,
'message': 'User not found',
}, 404
额外提示:Flask-Restplus(附加库)支持 "marshaling" 响应,这基本上就是您想要做的。
我正在使用 flask 开发应用程序后端
当我 return 响应时,一些数据类型与值一起包含在其中。这是 return 文档值
的一些逻辑示例代码def single_user(user_id):
user = users.read(user_id)
if user:
return {
'success': True,
'user': user,
}, 200
return {
'success': False,
'message': 'User not found',
}, 404
我的用户模型就是这样
from datetime import datetime
import mongoengine as me
class User(me.Document):
phone = me.StringField()
email = me.EmailField()
password = me.StringField()
accountType = me.StringField()
createdAt = me.DateTimeField(default=datetime.now())
updatedAt = me.DateTimeField(default=datetime.now())
profil = me.EmbeddedDocumentField(Profil)
meta = {
'collection': 'users',
'strict': False,
}
这里是响应的示例输出
{
"success": true,
"user": {
"_id": {
"$oid": "5dc968e2e50cca5af0ba50cc"
},
"createdAt": {
"$date": 1573491186501
},
"profil": {
"checked": false,
"followerList": [
{
"$oid": "5dc96268788964480d6a2a8a"
}
],
"followingList": [],
"playpoint": 15
},
"updatedAt": {
"$date": 1573491186501
}
}
}
这很好,但是有没有办法从输出中删除“$oid”和“$date”并只获取值?
我认为这是 python 的事情,因为当我尝试从 nodejs 等效后端提供这些数据时,我只有 "id"、"createdAt" 和 [=34 中的值=].
编辑:这将是所需的输出
{
"success": true,
"user": {
"_id": "5dc968e2e50cca5af0ba50cc",
"createdAt": 1573491186501,
"profil": {
"checked": false,
"followerList": [
"5dc96268788964480d6a2a8a"
],
"followingList": [],
"playpoint": 15
},
"updatedAt": 1573491186501
}
}
与 MongoEngine 的工作方式有关。这就是返回这些字段的原因。解决它的唯一方法是自己映射字段。
def single_user(user_id):
user = users.read(user_id)
if user:
mappedUser = {
'_id': user['_id']['$oid'],
'createdAt': user['createdAt']['$date'],
...
}
return {
'success': True,
'user': mappedUser,
}, 200
return {
'success': False,
'message': 'User not found',
}, 404
额外提示:Flask-Restplus(附加库)支持 "marshaling" 响应,这基本上就是您想要做的。