分かりやすく、使いやすく。

POSTやGETで送信されたデータを取得する方法(単一項目)

スポンサーリンク

POST と GET で送信されたデータは、いずれも FieldStorage のオブジェクトから getfirst() や getvalue() で値を取得することが可能です。以下、POST と GET のサンプルコードを分けて記述していますが、 Python のコードはどちらも同じです。

  1. POST で送信されたデータを取り出す場合(getfirst)
  2. POST で送信されたデータを取り出す場合(getvalue)
  3. GETで送信されたデータを取り出す場合(getfirst)
  4. GETで送信されたデータを取り出す場合(getvalue)


POST で送信されたデータを取り出す場合(getfirst)

データを POST で送信する HTML ファイルのサンプルコードは次の通りです。

post.html
1
2
3
4
5
6
7
8
9
10
11
12
13
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
 
<form method="post" action="receive_post.py">
    <input type="text" name="your_name" />
    <input type="submit" />
</form>
 
</body>
<html> 

上記の HTML フォームから送信されたデータを受け取る Python のコードは次の通りです。

getfirst を使用する場合、同一名のフィールドが 2 個以上送信されるた場合は先頭の値を返します。

receive_post.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/python3.4
# -*- coding: utf-8 -*-
 
import cgi
import sys
import io
 
# 日本語を受信時にエラーにならないようにする為に必要。
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
 
form = cgi.FieldStorage()
 
# 入力チェック(必要な変数が送信されていない場合はエラー。)
if 'your_name' not in form:
    print('Content-type: text/html; charset=UTF-8')
    print('')
    print('your_name フィールドが送信されていません。')
    sys.exit()
 
# your_name の値を取得して変数にセット。
# 値が入力されていない場合は「匿名」を設定。
# your_name が複数ある場合は先頭の値を取得。
your_name = form.getfirst('your_name', '匿名')
 
# テキストファイルとして内容を出力
print('Content-type: text/html; charset=UTF-8')
print('')
print(your_name) 

POST で送信されたデータを取り出す場合(getvalue)

データを POST で送信する HTML ファイルのサンプルコードは次の通りです。

post.html
1
2
3
4
5
6
7
8
9
10
11
12
13
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
 
<form method="post" action="receive_post.py">
    <input type="text" name="your_name" />
    <input type="submit" />
</form>
 
</body>
<html> 

上記の HTML フォームから送信されたデータを受け取る Python のコードは次の通りです。

getvalue を使用する場合、同一名のフィールドが 2 個以上送信されるとリストを返す為、 isinstance で返された値がリストかを確認し、リストの場合はエラーとしています。

receive_post.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/python3.4
# -*- coding: utf-8 -*-
 
import cgi
import sys
import io
 
# 日本語を受信時にエラーにならないようにする為に必要。
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
 
form = cgi.FieldStorage()
 
# 入力チェック(必要な変数が送信されていない場合はエラー。)
if 'your_name' not in form:
    print('Content-type: text/html; charset=UTF-8')
    print('')
    print('your_name フィールドが送信されていません。')
    sys.exit()
 
# your_name の値を取得して変数にセット。
# 値が入力されていない場合は「匿名」を設定。
your_name = form.getvalue('your_name', '匿名')
 
# 入力チェック(yourname が 2 個以上送信されている場合はエラー。)
if isinstance(your_name, list):
    print('Content-type: text/html; charset=UTF-8')
    print('')
    print('your_name フィールドが 2 個以上送信されています。')
    sys.exit()
 
# テキストファイルとして内容を出力
print('Content-type: text/html; charset=UTF-8')
print('')
print(your_name) 

GETで送信されたデータを取り出す場合(getfirst)

データを GET で送信する HTML ファイルのサンプルコードは次の通りです。

get.html
1
2
3
4
5
6
7
8
9
10
11
12
13
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
 
<form method="get" action="receive_get.py">
    <input type="text" name="your_name" />
    <input type="submit" />
</form>
 
</body>
<html> 

上記の HTML フォームから送信されたデータを受け取る Python のコードは次の通りです。(POST で送信されたデータを受け取るソースと同じ。)

getfirst を使用する場合、同一名のフィールドが 2 個以上送信されるた場合は先頭の値を返します。

receive_get.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/python3.4
# -*- coding: utf-8 -*-
 
import cgi
import sys
import io
 
# 日本語を受信時にエラーにならないようにする為に必要。
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
 
form = cgi.FieldStorage()
 
# 入力チェック(必要な変数が送信されていない場合はエラー。)
if 'your_name' not in form:
    print('Content-type: text/html; charset=UTF-8')
    print('')
    print('your_name フィールドが送信されていません。')
    sys.exit()
 
# your_name の値を取得して変数にセット。
# 値が入力されていない場合は「匿名」を設定。
# your_name が複数ある場合は先頭の値を取得。
your_name = form.getfirst('your_name', '匿名')
 
# テキストファイルとして内容を出力
print('Content-type: text/html; charset=UTF-8')
print('')
print(your_name) 

GETで送信されたデータを取り出す場合(getvalue)

データを GET で送信する HTML ファイルのサンプルコードは次の通りです。

get.html
1
2
3
4
5
6
7
8
9
10
11
12
13
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
 
<form method="get" action="receive_get.py">
    <input type="text" name="your_name" />
    <input type="submit" />
</form>
 
</body>
<html> 

上記の HTML フォームから送信されたデータを受け取る Python のコードは次の通りです。(POST で送信されたデータを受け取るソースと同じ。)

getvalue を使用する場合、同一名のフィールドが 2 個以上送信されるとリストを返す為、 isinstance で返された値がリストかを確認し、リストの場合はエラーとしています。

receive_get.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/python3.4
# -*- coding: utf-8 -*-
 
import cgi
import sys
import io
 
# 日本語を受信時にエラーにならないようにする為に必要。
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
 
form = cgi.FieldStorage()
 
# 入力チェック(必要な変数が送信されていない場合はエラー。)
if 'your_name' not in form:
    print('Content-type: text/html; charset=UTF-8')
    print('')
    print('your_name フィールドが送信されていません。')
    sys.exit()
 
# your_name の値を取得して変数にセット。
# 値が入力されていない場合は「匿名」を設定。
your_name = form.getvalue('your_name', '匿名')
 
# 入力チェック(yourname が 2 個以上送信されている場合はエラー。)
if isinstance(your_name, list):
    print('Content-type: text/html; charset=UTF-8')
    print('')
    print('your_name フィールドが 2 個以上送信されています。')
    sys.exit()
 
# テキストファイルとして内容を出力
print('Content-type: text/html; charset=UTF-8')
print('')
print(your_name) 
スポンサーリンク
スポンサーリンク