インタラクティブな値のやり取り (1/4)
作成:2017-12-23 08:50
更新:2017-12-23 08:50
更新:2017-12-23 08:50
■URLで値を渡す (1)
ユーザーから値を受け取るにはさまざまな方法があります。もっとも簡単なのは、「URLに必要な値をつけてアクセスする」というやり方でしょう。
AmazonやGoogleなどのサイトにアクセスすると、URLの後に「……?○○=××&○○=××&……」というように、なんだかよくわからない記号のようなものがずらずらと記述されているのを見ることがあります。あれは「クエリーパラメータ」と呼ばれるもので、アドレスのURLに必要な情報を付けてサーバーに送信する手法です。
このクエリーパラメータはどうやって受け取って利用するのでしょうか。やってみましょう。「hello」内のviews.pyを開き、index関数を下のリスト欄のように修正して下さい。そして、以下のような形でアクセスをしてみましょう。
これで、画面には、「こんにちは、taroさん。と表示されます。ここでは、?name=taroというようにクエリーパラメータがつけられています。これで、nameというキー(名前)に「taro」という値が設定されて送られます。
この送られた値は、index関数の引数で渡されるHttpRequestのGETというプロパティでとりだせます。このGETは辞書になっており、クエリーに渡されたパラメータがまとめられているのです。つまり、nameというキーの値ならば、GET['name']として取り出すことができるのです。
ここでの処理を見てみましょう。indexでは、以下のような形でif文が用意されています。
"name" in request.GET で、request.GETの中にnameという値があるかどうかチェックしています。もしあった場合は、その値を変数に取り出しています。
後は、この値を使って必要な処理をしていくだけです。クエリーパラメータの利用は意外に簡単なのです。
AmazonやGoogleなどのサイトにアクセスすると、URLの後に「……?○○=××&○○=××&……」というように、なんだかよくわからない記号のようなものがずらずらと記述されているのを見ることがあります。あれは「クエリーパラメータ」と呼ばれるもので、アドレスのURLに必要な情報を付けてサーバーに送信する手法です。
このクエリーパラメータはどうやって受け取って利用するのでしょうか。やってみましょう。「hello」内のviews.pyを開き、index関数を下のリスト欄のように修正して下さい。そして、以下のような形でアクセスをしてみましょう。
http://localhost:8000/hello/?name=taro
これで、画面には、「こんにちは、taroさん。と表示されます。ここでは、?name=taroというようにクエリーパラメータがつけられています。これで、nameというキー(名前)に「taro」という値が設定されて送られます。
この送られた値は、index関数の引数で渡されるHttpRequestのGETというプロパティでとりだせます。このGETは辞書になっており、クエリーに渡されたパラメータがまとめられているのです。つまり、nameというキーの値ならば、GET['name']として取り出すことができるのです。
ここでの処理を見てみましょう。indexでは、以下のような形でif文が用意されています。
if "name" in request.GET:
……nameがある場合の処理……
else:
……nameがない場合の処理……
"name" in request.GET で、request.GETの中にnameという値があるかどうかチェックしています。もしあった場合は、その値を変数に取り出しています。
name_str = request.GET['name']
後は、この値を使って必要な処理をしていくだけです。クエリーパラメータの利用は意外に簡単なのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
def index(request): if "name" in request.GET: name_str = request.GET['name'] else: name_str = 'noname' context = { 'msg': 'こんにちは、 ' + name_str + 'さん。', } return render(request, 'hello/index.html', context)
※関連コンテンツ