Python-network-programming-python-routing

提供:Dev Guides
移動先:案内検索

Python-ルーティング

ルーティングは、Webページを作成するコードにURLを直接マッピングするメカニズムです。 Webページの構造をより適切に管理するのに役立ち、サイトのパフォーマンスを大幅に向上させ、さらに強化または変更することが非常に簡単になります。 Pythonでは、ルーティングはほとんどのWebフレームワークで実装されています。 この章では、 flask Webフレームワークの例を参照します。

Flaskでのルーティング

Flaskの* route()デコレータは、URLを関数にバインドするために使用されます。 その結果、ブラウザでURLが言及されると、関数が実行されて結果が得られます。 ここでは、URL *'/hello' ルールが* hello_world()関数にバインドされています。 その結果、ユーザーが *http://localhost:5000/ URLにアクセスすると、* hello_world()*関数の出力がブラウザーにレンダリングされます。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello finddevguides'

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

上記のプログラムを実行すると、次の出力が得られます-

 *Serving Flask app "flask_route" (lazy loading)
* Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 *Debug mode: off
* Running on http://127.0.0.1:5000/(Press CTRL+C to quit)
127.0.0.1 - - [06/Aug/2018 08:48:45] "GET/HTTP/1.1" 200 -
127.0.0.1 - - [06/Aug/2018 08:48:46] "GET/favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [06/Aug/2018 08:48:46] "GET/favicon.ico HTTP/1.1" 404 -

ブラウザーを開き、URL http://localhost:5000/ をポイントして、実行されている関数の結果を確認します。

routing_1.png

URL変数の使用

routeを使用してURL変数を渡し、その場でURLを作成できます。 このために、関数の名前を最初の引数として受け入れ、残りの引数をURLルールの変数部分として受け入れるurl_for()関数を使用します。

以下の例では、関数名を引数としてurl_for関数に渡し、それらの行が実行されたときに結果を出力します。

from flask import Flask, url_for
app = Flask(__name__)

@app.route('/')
def index(): pass

@app.route('/login')
def login(): pass

@app.route('/user/')
def profile(username): pass

with app.test_request_context():
    print url_for('index')
    print url_for('index', _external=True)
    print url_for('login')
    print url_for('login', next='/')
    print url_for('profile', username='Tutorials Point')

上記のプログラムを実行すると、次の出力が得られます-

/
http://localhost/
/login
/login?next=%2F
/user/Tutorials%20Point

リダイレクト

リダイレクト機能を使用して、ルーティングを使用してユーザーを別のURLにリダイレクトできます。 ユーザーをリダイレクトする関数の戻り値として、新しいURLに言及します。 これは、既存のWebページを変更するときに一時的にユーザーを別のページに誘導する場合に役立ちます。

from flask import Flask, abort, redirect, url_for
app = Flask(__name__)

@app.route('/')
def index():
    return redirect(url_for('login'))

@app.route('/login')
def login():
    abort(401)
#    this_is_never_executed()

上記のコードが実行されると、ベースURLはアボート機能を使用するログインページに移動するため、ログインページのコードは実行されません。