POSTやGETで送信されたデータを取得する方法(単一項目)
POST と GET で送信されたデータは、いずれも FieldStorage のオブジェクトから getfirst() や getvalue() で値を取得することが可能です。以下、POST と GET のサンプルコードを分けて記述していますが、 Python のコードはどちらも同じです。
- POST で送信されたデータを取り出す場合(getfirst)
- POST で送信されたデータを取り出す場合(getvalue)
- GETで送信されたデータを取り出す場合(getfirst)
- 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) |
- Python
- POSTやGETで送信されたデータを取得する方法(単一項目)
- 空のファイルを作成する方法
- ファイル・フォルダの存在を確認する方法
- フルパスから1個上のフォルダのパスを取得する方法
- リストから重複した値を削除する方法
- PyQuery
- マッチした要素をループして処理する方法