3

Flaskオブジェクトを作成するために Factory パターンも使用するプロジェクトで Flask-Restful を使用しました。問題は、Flask に到達しようとすると 404 エラーが発生することですhttp://localhost:5000/api/v1/user/が、(デバッガーを介して) Flask アプリ オブジェクトを探索するurl_mapと、API ルールが存在します。だから、誰かが同じ問題を抱えていたら、私は可能な限りの解決策を講じています.

API アプリを作成する次の関数があります。

def create_app(settings_override=None):
    """
    Returns the API :class:`Flask` instance.

    :param settings_override: dictionary of settings to override.
    """
    app = factory.create_app(__name__, __path__, settings_override)
    api = Api(app, prefix='/api/v1', catch_all_404s=True)

    # API endpoints connected to the User model.
    api.add_resource(UserAPI, '/user/', endpoint='user')

    return app

UserAPI クラスのコード (Flask-Restful で使用):

class UserAPI(Resource):
    """
    API :class:`Resource` for returning the details of a user.
    This endpoint can be used to verify a user login credentials.
    """
    def get(self):
        return {'hello': 'world'}, 200

    def post(self):
        pass

factory.create_app機能:

def create_app(package_name, package_path, settings_override=None):
    """
    Returns an instance of Flask configured with common functionnalities for
    Cubbyhole.

    :param package_name: application package name
    :param package_path: application package path
    :param settings_override: a dictionnary of settings to override
    """
    app = Flask(package_name, instance_relative_config=True)

    app.config.from_object('cubbyhole.settings')
    app.config.from_pyfile('settings.cfg', silent=True)
    if settings_override is not None:
        app.config.update(settings_override)

    db.init_app(app)

    register_blueprints(app, package_name, package_path)

    return app

Python バージョン 2.7 Flask v. Flask-Restful バージョン

4

1 に答える 1

1

Flask の IRC チャネルに関するいくつかの調査といくつかの質問の後、カスタム ドメイン名を使用する場合、SERVER_NAMEconfig 変数を介してポート番号を設定する必要があることがわかりました。そのため、問題は工場コードに起因するものではありませんでした。

経由でサーバーにアクセスする場合はhttp://myserver.io:5000/、SERVER_NAME のポート (ここでは 5000) を として設定しますSERVER_NAME = myserver.io:5000

私の設定のこの単一の変更は私のために働いた:)ありがとう!

于 2014-04-26T15:19:01.940 に答える