6

私はフラスコを使い始めたばかりで、思わぬ障害にぶつかりました。フレームワークに慣れるために小さなブログを書こうとしているので、「auth」と「posts」の 2 つのパッケージを作成しました。Flask docsの Large Applications セクションを読みました。

私のディレクトリは次のようになります。

>/root
>>run.py 

>>/posts

>>>____init____.py  
>>>views.py  
>>>/templates
>>>/static  

>>/auth  
>>>____init____.py  
>>>views.py  
>>>/templates
>>>/static

run.py は次のようになります。

from flask import Flask
from auth import auth_app
from posts import posts_app

auth_app.run()
posts_app.run()

/posts/__init__.py次のようになり/auth/__init__.pyます。

from flask import Flask

auth_app = Flask(__name__)

import auth.views

そして、views.py は次のようになります。

from auth import auth_app

@auth_app.route('/auth/')
def index():
    return "hello auth!"

しかし、サーバーを実行するたびに、localhost/auth/ のみが利用可能で、それ以外はすべて 404 になるため、投稿アプリが実行されていないと想定しています。

誰でも助けることができますか?

4

2 に答える 2

6

設計図を使用する Mark のアプローチはあなたのプロジェクトにうまく適合しているように見えますが、パッケージごとに個別のアプリケーションを使用したい場合は、werkzeug.wsgi.DispatcherMiddleware.

最初のアプリを実行した後、単一のプロセスで 2 番目のアプリを実行することはできませんが (質問のように)、DispatcherMiddleware では問題ありません。これを使用して、URL プレフィックスに基づいてメイン アプリケーションとその他のアプリケーションを定義できます。

ドキュメントの例では、ユーザーが要求する URL に応じて実行される 2 つのアプリケーション (フロントエンドとバックエンド) を区別しています。

詳細については、Matt Wright の「How I Structure My Flask Applications」を読み、彼のサンプル プロジェクトであるOverholtを参照してください。彼は 2 つのアプリを使用することに決めました。1 つはメイン Web サイト (フロントエンド) 用で、もう 1 つは API 用であり、URL プレフィックスに基づいて 2 つのアプリを区別します。彼のコードから*:

    from werkzeug.serving import run_simple
    from werkzeug.wsgi import DispatcherMiddleware
    overholt import api、フロントエンドから


    application = DispatcherMiddleware(frontend.create_app(), {
        '/api': api.create_app()
    }))


    if __name__ == "__main__":
        run_simple('0.0.0.0', 5000, アプリケーション, use_reloader=True, use_debugger=True)

このようにして、彼は 2 つのアプリケーションを作成し、それぞれに定義済みのビュー、構成などのセットがあり、同じ Python インタープリター プロセスからそれらを実行できます。

*run_simple()開発用にのみ使用することを意図したものであり、本番用ではないことに注意してください。

于 2014-12-29T22:37:22.307 に答える
6

auth_app.run() メソッドが、プログラムの実行をブロックしています。これが、posts_apps アプリが実行されない理由です。ページを提供するプロセス全体は、Flask の run() メソッド内で行われます。したがって、同じプロセスで 2 つの Flask アプリを実行することはできないと結論付けることができます。

このようにアプリケーションを 2 つに分割したい場合、推奨される方法はblueprintsを使用することです。2 つのアプリ (認証と投稿) を作成するのではなく、2 つのブループリントを作成します。次に、次のように1つのアプリケーションを作成します...

from flask import Flask
from auth import auth_blueprint
from posts import post_blueprint

app = Flask(__name__)
app.register_blueprint(auth_blueprint)
app.register_blueprint(post_blueprint)
app.run()
于 2012-06-21T15:55:17.370 に答える