Flask-PyMongo - init_app () отсутствует 1 обязательный позиционный аргумент: 'app' - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь инициализировать мою базу данных с помощью flask-pymongo.

Но я получаю следующую ошибку:

Файл "run.py", строка 22, в
app = create_app ("config")
Файл "run.py", строка 11, в create_app
mongo.init_app (app)
TypeError: 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

Я хочу, чтобы они импортировали монго на этот ресурс, чтобы я мог получить доступ к коллекции пользователей.

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

Я пытаюсь настроить api restful с ресурсами, используя Flask-restful и flask-pymongo.Любые другие предложения по улучшению моего подхода приветствуются.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Вы должны использовать колбу-пимонго, как this :

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)
0 голосов
/ 29 сентября 2018

Вы не создали экземпляр класса PyMongo в db.py.

mongo = PyMongo()
...