Python-network-programming-python-routing
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/ をポイントして、実行されている関数の結果を確認します。
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はアボート機能を使用するログインページに移動するため、ログインページのコードは実行されません。