我正在使用flask创建简单的api。 api只是从mongoDB返回值。如果我在同一功能内进行连接,则一切正常。我不只是在文件开始时进行连接,因为我在ubuntu上使用uwsgi和nginx服务器。如果我那样做,那么就会有叉子的问题。
但是,我必须将此连接与其他api一起使用,因此被认为可以创建一个单独的类进行连接,每个api都将简单地调用它。我正在使用此功能使代码易于管理。但是,当我尝试这些代码时,它总是显示内部服务器错误。我也尝试使此函数静态化,但仍然存在错误。
注意-我在这里使用mongodbatlas帐户时,我已经将 mongodb地址替换为xxx
from flask import Flask
from flask import request, jsonify
from flask_pymongo import pymongo
from pymongo import MongoClient
from flask_restful import Resource, Api, reqparse
app = Flask(__name__)
api = Api(app)
#client = MongoClient("xxx")
#db = client.get_database('restdb')
#records = db.stars
class dbConnect():
def connect(self):
client = MongoClient("xxx")
db = client.get_database('restdb')
records = db.stars
return records
class Order(Resource):
def get(self):
#client = MongoClient("xxx")
#db = client.get_database('restdb')
#records = db.stars
#star = records
star = dbConnect.connect
output = []
for s in star.find():
output.append({'name' : s['name'], 'distance' : s['distance']})
return jsonify({'result' : output})
api.add_resource(Order, '/')
if __name__ == "__main__":
app.run(host='0.0.0.0')
错误 {"message": "Internal Server Error"}
答案 0 :(得分:1)
初步调查显示,您尚未实例化dbConnect
类。另外,您没有正确调用方法connect
。
class Order(Resource):
def get(self):
db = dbConnect() # This was missing
star = db.connect() # This is how you make method call properly.
output = []
for s in star.find():
output.append({'name' : s['name'], 'distance' : s['distance']})
return jsonify({'result' : output})
也应将class dbConnect()
声明为class dbConnect:
。