【Python】Python で 簡単なWebアプリ ~ formデータを受け取る ~

■ はじめに

Python で、formデータを受け渡しを行う

【0】補足:Webフレームワークについて

本来であれば、以下のようなWebフレームワークを使うべき。

 * Flask(フラスク)
  => 以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2018/09/11/021900

 * Django(ジャンゴ)
  => 以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2022/08/07/121017

 * Bottle(ボトル)
etc...

【1】前提条件

 * 実行環境を以下の関連記事を参考に構築する

【2】サンプル

1)フォルダ構成

demo-main.html ... 受け渡すHTMLファイル
└ cgi-bin
   └ input.py ... 受け取るPythonスクリプト

注意

 * 「cgi-bin」配下、もしくは「htbin」配下にPythonスクリプトを置くこと
  => ここで、ハマった

demo-main.html : 受け渡すHTMLファイル

<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8">
<title>Demo</title>
</head>
<body>
<form name="Form" method="POST" action="/cgi-bin/result.py">
 ID: <input type="text" size="30" name="id">
 Name: <input type="text" size="30" name="name">
<input type="submit" value="submit" name="button">
</form>
</body>
</html>

/cgi-bin/result.py : 受け取るPythonスクリプト

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import io
import sys
import cgi
import cgitb

cgitb.enable()
sys.stdin  = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer,encoding='utf-8')

form = cgi.FieldStorage()

id = form.getvalue('id')
name = form.getvalue('name')

html_body="""
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8">
<title>Demo Result</title>
</head>
<body>
<div><h1>Result</h1></div>
<div>ID: %s</div>
<div>Name: %s</div>
</body>
</html>"""

print("Content-Type: text/html;charset=utf-8")
print()
print(html_body % (id, name))

【3】実行コマンド

# python -m http.server --cgi 【ポート番号】
python -m http.server --cgi 8000

動作確認

 * 以下のサイトをブラウザでアクセスする

アクセスし、id=1000, name=Mikeと入力し、ボタン押下

http://localhost:8000/demo-main.html

参考文献

https://qiita.com/wan-liner/items/15312af7eca45c67f4fd
https://symfoware.blog.fc2.com/blog-entry-1977.html

関連記事

Flask ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/09/11/021900
Django ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/08/07/121017