首页 文章

Flask-PyMongo - init_app()缺少1个必需的位置参数:'app'

提问于
浏览
-1

我正在尝试使用flask-pymongo初始化我的数据库 .

但我得到以下错误,

文件“run.py”,第22行,在app = create_app(“config”)文件“run.py”,第11行,在create_app中mongo.init_app(app)TypeError:init_app()缺少1个必需的位置参数:'应用”

run.py

from flask import Flask
from app import api_bp
from db import mongo

def create_app(config_filename):

    app = Flask(__name__)
    app.config.from_object(config_filename)
    app.register_blueprint(api_bp, url_prefix='/api')

    mongo.init_app(app)

    return app

# def logger():


# def database():


if __name__ == "__main__":
    app = create_app("config")
    app.run(host='0.0.0.0', port=8080, debug=True)

db.py

from flask_pymongo import PyMongo

mongo = PyMongo

config.py

DEBUG = True
SECRET_KEY = "secret"
MONGO_URI = "mongodb://localhost:27017/api"

app/init.py

import os
import json
import datetime
from flask import Blueprint
from flask import jsonify
from flask_restful import Api
from .users.resource import UsersResource

api_bp = Blueprint('api', __name__)
api = Api(api_bp)


api.add_resource(UsersResource, '/users')

app/users/resource.py

我想让他们将mongo导入此资源,以便我可以访问用户集合 .

from flask_restful import Resource
from flask import jsonify
from .repository import UsersRepository

class UsersResource(Resource):

    def __init__(self):

        self.repository = UsersRepository()

    def get(self):

        data = {"Users": "Resource"}
        res = data, 200
        return res

我正在尝试使用Flask-restful和flask-pymongo设置资源的restful api . 我们欢迎任何其他改进我的方法的建议 .

2 回答

  • 0

    你应该像this一样使用flask-pymongo:

    from flask import Flask
    from flask_pymongo import PyMongo
    
    app = Flask(__name__)
    app.config["MONGO_URI"] = "mongodb://localhost:27017/myDatabase"
    mongo = PyMongo(app)
    

    所以在run.py中,你应该使用这个代码:

    from flask import Flask
    from app import api_bp
    from db import mongo
    
    def create_app(config_filename):
    
        app = Flask(__name__)
        app.config.from_object(config_filename)
        app.register_blueprint(api_bp, url_prefix='/api')
    
        # mongo.init_app(app) # remove this line
    
        return app
    
    # def logger():
    
    
    # def database():
    
    
    if __name__ == "__main__":
        app = create_app("config")
        py_mongo = mongo(app)
        app.run(host='0.0.0.0', port=8080, debug=True)
    
  • 1

    您没有在db.py中实例化PyMongo类 .

    mongo = PyMongo()
    

相关问题