web-dev-qa-db-ja.com

python flask app.route()セクションはどのように実行されますか?

flaskとpythonは初めてです。たとえば、次のコードがある場合...

@app.route('/')
def index():
 return "Hello world!"

@app.route('/accounts')
def accounts():
    return some_data

@app.route('/login')
def login():
    return render_template(login.html)

if __name__ == "__main__":
    app.run()

これらはどの順序で実行されますか?あなたがウェブサイトの/ accountsページにいるなら私が理解していることから、その機能が実行されます。/loginページにいる場合、その関数が実行されます。ルートメソッドのパラメーターはどのような役割を果たしますか?次に、最後の2行のコードは何回実行されますか(app.run()は1回呼び出されるか、app.route()が呼び出されるたびに呼び出されますか)?さらに、アプリをWebサイトのファイル構造内に配置する必要があるのはどのフォルダーですか?

9
J.E.C.

正解です。ここの各機能は、サイトの特定のページに移動したときにトリガーされます。理解を深めるためにさらに調査が必要な研究は確かにありますが、ここでは簡単な内訳を示します。

Pythonでは、実行される「メイン」ファイル(pythonコマンド:_python etc.py_)で実行するファイルを意味します)の前に、ファイル名が「__main__」で内部的に置き換えられますその知識に基づいて、このコードをメインファイルとしてファイルを実行すると、条件付きステートメント_if __name__ == "__main__"_内のコードが実行されると言えます。したがって、app.run()が実行され、正確に1回実行されます。これは、このifブロックがどのクラス、関数、または制御構造の内部にもなく、ファイルが1回だけ解釈されるためです。

次に、@ app.route(....)はデコレータと呼ばれるものです。デコレータの概要と使用方法は次のとおりです: https://realpython.com/blog/python/primer-on-python-decorators/ 。そこの最初のパラグラフは本当に真っ直ぐです。

定義により、デコレータは別の関数を取り、明示的に変更せずに後者の関数の動作を拡張する関数です。

私はまた、中級者が本当に好きですPythonデコレータの章をチェックすることをお勧めします。 http://book.pythontips.com/en/latest/decorators.html =

基本的に、次のような、定義しているこれらのルート関数:

_def index():
  return "Hello world!"
_

ある時点で@app.route()デコレータに呼び出すように指示している関数のようなものです。 @app.route()はデコレータです。内部コマンドの実行中のある時点で指定した関数を呼び出すように定義されています。それが取る入力引数は、いわゆるURLルールです。これは基本的に、ルートが取るように定義した関数をトリガーするために着信要求のURLが一致する必要があるパターンのようなものです。このデコレータインターフェースは実際には便利です。[ここ] [1]を参照してください。つまり、処理する関数を使用してルートを作成するには、デコレータの代わりにapp.add_url_rule()関数を使用することもできます。 Flaskのドキュメントから取られたように:

add_url_rule(rule、endpoint = None、view_func = None、**)

URLルールを接続します。 route()デコレータとまったく同じように機能します。 view_funcが提供されている場合、それはエンドポイントに登録されます。

非常に一般的なレベルで概要を説明しましたが、Flaskのドキュメントに飛び込んで、それで何ができるかを確認する必要があります。

編集:私はあなたの質問のすべてに答えていないことに気づきました。通常、Flaskは、変更されないcssやhtmlページなどの静的アセットを提供するためのstatic /フォルダーと、通常、サーバーからのデータで埋められるので、コードに基づく単一のファイルFlask appは次のようになります。

_- app.py
static/
templates/
    - login.html
_

ここで、login.htmlは、データが入力され、/ loginページ用にレンダリングされるテンプレートです。

14
Ananth Rao