使用Python和Flask创建支持MongoDB的RESTFul API

时间:2016-09-04 23:52:36

标签: python mongodb rest api

我目前正在使用带有烧瓶的MongoDB支持的RESTFUL API ...但是,我已经使用find_one()设置了区域搜索查询,但是只要我尝试使用find()将其设置为具有多个结果的更大查询,我在邮递员身上得到以下错误:

UnboundLocalError: local variable 'output' referenced before assignment

这是可行的代码,但它只返回查询中的一个文档:

@app.route('/active_jobs/<zone>', methods = ['GET'])
def get_one_zone(zone):

ajobs = mongo.db.ajobs

q = ajobs.find_One({'zone' : zone})

output = {}

output = ({
'zone': q['zone'], 'jobdate' : q['jobdate'],
'jobtime' : q['jobtime'],'client': q['client'],
})

return jsonify({output})

一旦我试图找到所有结果使它找到()它不起作用

@app.route('/active_jobs/<zone>', methods = ['GET'])
def get_one_zone(zone):

ajobs = mongo.db.ajobs

q = ajobs.find({'zone' : zone})

output = {}

output = ({
'zone': q['zone'], 'jobdate' : q['jobdate'],
'jobtime' : q['jobtime'],'client': q['client'],
})

return jsonify({output})

聚苯乙烯。我是编程世界的新手,所以如果你可以使用非常感谢的简单例子。

2 个答案:

答案 0 :(得分:0)

这可能是因为mongo中的'find_One'将仅返回1个文档作为字典,而find将返回多个文档作为字典列表。 jsonify在列表中不起作用,如下所示:How do I `jsonify` a list in Flask?

您可以使用json.dumps作为答案。

答案 1 :(得分:0)

出于安全原因而不是返回普通列表,建议返回带有列表的dict,如:

form (x, y) = x + y
form any_num = any_num

jsonify会处理这个问题。

顺便说一句,我构建了一个轻量级框架来构建restful apis,使用的默认数据库引擎是mongodb,所以我想你可能会觉得它很有帮助。这是代码:https://github.com/sebastiandev/peach

有一些循序渐进的例子。如果您有任何其他疑问,请告诉我,我会尽力帮助您。