如何使用 python flask 和 mongoalchemy 显示对象数组
How to display an array of objects using python flask and mongoalchemy
如何为 mongoalchemyreturn 编写一个 json 对象数组的终点
我正在尝试如下所示:
@authenticate_bp.route('/users',methods=['GET'])
def user_list():
users = [x.serialize for x in TokenBasedAuth.query.all()]
return jsonify({'usersList': users})
架构如下图
class TokenBasedAuth(db.Document):
username = db.StringField()
password = db.StringField()
email = db.StringField()
firstName = db.StringField()
lastName = db.StringField()
def serialize(g):
return {
"_id" : str(g._id),
"username" : g.username,
"firstName" : g.firstName,
"lastName" : g.lastName,
"password" : g.password,
"email" : g.email
}
而db i中的数据如下图
{
"_id" : ObjectId("586a0f01558b6728388161be"),
"username" : "sam",
"firstName" : "sam",
"lastName" : "123",
"password" : "123",
"email" : "email@123"
}
我收到如下所示的错误
AttributeError: 'TokenBasedAuth' 对象没有属性 'serialize' // Werkzeug Debugger
按预期工作的替代路线如下所示
@authenticate_bp.route('/users/list')
def users_listItr():
try:
users = TokenBasedAuth.query.all()
formatted_users=[]
for user in users:
print user
formatted_users.append({
'username':user.username,
'password':user.password,
'email':user.email,
'firstName':user.firstName,
'lastName':user.lastName
})
return json.dumps({'users':formatted_users}),
200,{'Content-Type':'application/json'}
except Exception,e:
return jsonify(status='ERROR',message=str(e))
但这不是一个好主意,因为我正在尝试构建 api 一个可能包含几千个结构更复杂的文档的模式,请提出解决方法
请帮忙获取对象数组
我认为最简单的方法是在结果集上使用一个生成器,该生成器具有将结果对象序列化为有效的函数 JSON:
def serialize(row):
return {
"_id" : str(row._id),
"username" : row.username,
"firstName" : row.firstName,
"lastName" : row.lastName,
"password" : row.password,
"email" : row.email
}
@authenticate_bp.route('/users',methods=['GET'])
def user_list():
users = [serialize(x) for x in TokenBasedAuth.query.all()]
return jsonify({'usersList': users})
您可以通过一些方法尝试创建自定义 JSON 编码器:See this post。一般来说,我发现,对于 Flask,如果我需要 JSONify 某些东西,我需要坚持使用列表和指令,因为它更简单。
如何为 mongoalchemyreturn 编写一个 json 对象数组的终点
我正在尝试如下所示:
@authenticate_bp.route('/users',methods=['GET'])
def user_list():
users = [x.serialize for x in TokenBasedAuth.query.all()]
return jsonify({'usersList': users})
架构如下图
class TokenBasedAuth(db.Document):
username = db.StringField()
password = db.StringField()
email = db.StringField()
firstName = db.StringField()
lastName = db.StringField()
def serialize(g):
return {
"_id" : str(g._id),
"username" : g.username,
"firstName" : g.firstName,
"lastName" : g.lastName,
"password" : g.password,
"email" : g.email
}
而db i中的数据如下图
{
"_id" : ObjectId("586a0f01558b6728388161be"),
"username" : "sam",
"firstName" : "sam",
"lastName" : "123",
"password" : "123",
"email" : "email@123"
}
我收到如下所示的错误
AttributeError: 'TokenBasedAuth' 对象没有属性 'serialize' // Werkzeug Debugger
按预期工作的替代路线如下所示
@authenticate_bp.route('/users/list')
def users_listItr():
try:
users = TokenBasedAuth.query.all()
formatted_users=[]
for user in users:
print user
formatted_users.append({
'username':user.username,
'password':user.password,
'email':user.email,
'firstName':user.firstName,
'lastName':user.lastName
})
return json.dumps({'users':formatted_users}),
200,{'Content-Type':'application/json'}
except Exception,e:
return jsonify(status='ERROR',message=str(e))
但这不是一个好主意,因为我正在尝试构建 api 一个可能包含几千个结构更复杂的文档的模式,请提出解决方法
请帮忙获取对象数组
我认为最简单的方法是在结果集上使用一个生成器,该生成器具有将结果对象序列化为有效的函数 JSON:
def serialize(row):
return {
"_id" : str(row._id),
"username" : row.username,
"firstName" : row.firstName,
"lastName" : row.lastName,
"password" : row.password,
"email" : row.email
}
@authenticate_bp.route('/users',methods=['GET'])
def user_list():
users = [serialize(x) for x in TokenBasedAuth.query.all()]
return jsonify({'usersList': users})
您可以通过一些方法尝试创建自定义 JSON 编码器:See this post。一般来说,我发现,对于 Flask,如果我需要 JSONify 某些东西,我需要坚持使用列表和指令,因为它更简单。