【问题标题】:Flask-PyMongo - init_app() missing 1 required positional argument: 'app'Flask-PyMongo - init_app() 缺少 1 个必需的位置参数:'app'
【发布时间】:2019-03-05 05:12:38
【问题描述】:

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

但我收到以下错误,

文件“run.py”,第 22 行,在
app = create_app("config")
文件“run.py”,第 11 行,在 create_app
mongo.init_app(app)
类型错误:init_app() 缺少 1 个必需的位置参数:'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)

    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。欢迎任何其他改进我的方法的建议。

【问题讨论】:

    标签: python flask pymongo flask-restful flask-pymongo


    【解决方案1】:

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

    mongo = PyMongo()
    

    【讨论】:

      【解决方案2】:

      你应该像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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-10
        相关资源
        最近更新 更多