こんにちは。
Fraskでアプリを作ってたらメソッドのGET/POSTが必要になったので、どのような働きをするのか調べて記事にしました。
この記事が誰かの役に立ったら幸いです。
GET/POSTはHTTPのメソッド
GET/POSTはHTTPのメソッドです。
まずは、HTTPが何か説明したいと思います。
HTTPというプロトコル
クライアント(ブラウザ)とWebサーバーがやり取りするメッセージの内容や手順を定めたものです。
一言で言えば、Webサーバーとの通信プロトコルです。
HTTPとメソッドの関係
HTTPプロトコルに沿って、クライアント(ブラウザ)からサーバに向けて陸セストのメッセージを送るのですが、メッセージの中には、「何を」「どうしたい」のかが書いてあります。
この「どうしたい」に相当するものをメソッドと呼んでおり、つまり、GET/POSTはサーバーに「どうしたい」を指示するものだということです。
ちなみに、「何を」に相当するものをURI(Uniform Resource Identifier)と呼び、詳しく調べると長くなりそうなので本記事では飛ばします。
GETとPOSTの役割
GET
Webサーバーにアクセスして、ページのデータを読み出すときに使うのがGETです(なのでよく使用される)
GETを書き、URIに/***.htmのようなページデータを格納したファイルの名前を書くと、/***.htmlを読み出す意味になります。
このメッセージがサーバーに届くと、サーバーは/***.htmlというファイルを開いて、取り出したデータをレスポンス・メッセージの中に格納してクライアント(ブラウザ)に送り返し、ブラウザーが画面表示します。
概要
URIで指定した情報を取り出す。
ファイルの場合、そのファイルの中身を送り返す。
プログラムの場合は、そのプログラムの出力データをそのまま返送する。
POST
フォーム(Webのページの中にある、テキスト入力欄やチェック・ボックスなどが表示された部分)にデータを記入してWebサーバーに送信する場合に使用します。ネットショッピングで住所や名前を記入したり、アンケートに答えたり、といった部分がフォームです。
POSTを使用する場合、URIにはWebサーバー内で動作するアプリケーションプログラム(注文データを処理したり、アンケートのデータを処理するプログラム)のファイル名を書きます。
そして、リクエストメッセージの中には、メソッドとURIに加えて、プログラムやスクリプトに渡すデータも書きます(そのデータは、ユーザーが入力した値のことです)。
このメッセージがサーバに届いたら、サーバーはURIで指定されたプログラムにメッセージに記載されているデータを渡します。
そして、そのプログラムが出力するデータを受け取って、メッセージに格納してクライアント(ブラウザ)に折り返します。
概要
クライアント(ブラウザ)からサーバーにデータを送信する。
フォームに入力したデータを送信する場合などに使う。
GETとPOSTを使用してアプリを作ってみる
実際に、GETとPOSTを使用してアプリを作ってみました。
フレームワークにはPythonのFraskを使用します。
スクリプト
from flask import Flask, render_template, request
app = Flask(name)
@app.route(‘/’, methods=[‘GET’])
def index():
return render_template(‘index.html’, \
title=”Welcome to Rope_Blog”,\
message=”Who are you?”)
@app.route(‘/’, methods=[‘POST’])
def form():
field = request.form[‘field’]
return render_template(‘index.html’,\
title=”Sample answer”,\
message=”Hello %s-san” % field)
if name == ‘main‘:
app.debug=True
app.run()
@app.route(‘/’. methods=[‘GET’])
GETアクセスした時、関数indexを読み出すようにしています。
@app.routeの引数にmethodsを用意し、関数indexではGETのみ受け付けます。
まず、↓のように表示しています。
@app.route(‘/’.methods=[‘POST’])
関数formではPOSTの処理のみ実行できようにしています。
これに加えて、「request」というオブジェクトを利用します。
そして、以下のようにして、入力値=fieldの値を変数にして取り出しています。
field = request.form[‘field’]
関数formは、「キーを指定してその値を取り出す」ということができるようになっています。
名前を入力して、submitを押すと
↓
入力した値を受け取り、表示することができました。
HTMLとCSS
参考にHTMLとCSSも載せておきます。
HTML
<!doctype html><html lang=”ja”>
<head>
<title>Index </title>
<meta charse=”utf8″/>
<link rel=”stylesheet”
href=”{{url_for(‘static’,filename=’style.css’)}}”>
</head></html><body>
<div class=”test”>
<span class=”target”>
<h1>{{title}}</h1>
<p>{{message}}</p>
<form method=”post” action=”/”>
<input type=”text” name=”field” style=”width:200px; height:50px; font-size:20pt”>
<input type=”submit”value =”submit” style=”width:200px; height:50px; font-size:20pt”>
</form></span> </dvi></body></hmtl>
CSS
html,body {height:100%;}
div.test{
display:table;
width:100%;
height:100%;
background-color:rgb(135, 219, 252);
text-align:center;
}
div.test .target{
display:table-cell;
vertical-align:middle;
}
h1 {
color: rgb(41, 61, 245);
font-size: 42pt;
margin:0px;
}
p{
font-size:28pt;
}
コメント