職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

ページ間で値を受け渡す方法---cgiモジュール

2021年05月09日 | Python
ページ間で値を受け渡す方法

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと
参考ページ
Python3.5のcgiモジュールを使ってページ間で値を受け渡す
しかし、転送される日本語は文字化けする。

【入力ホーム】
・入力ホームをhtmlで書く
「cgiValueTest.html」ファイルにコードを書き、カレント D:\pg\Python38に置く

サンプルコード
<!DOCTYPE html>
<html>
<head>
<title>cgiValueTest.py</title>
</head>
<body>
<form action="/cgi-bin/cgiValueTest.py" method="POST">
<input type="text" name="text" value="diag" />
<input type="submit" name="submit" />
</form>
</body>
</html>

【出力ファイル】
「cgiValueTest.py」ファイルにコードを書き、D:\pg\Python38\cgi-bin 上に置く
サンプルコード
#!/usr/bin/env python
import sys
import io
import cgi
import cgitb

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

#httpレスポンスの本体となるHTML文を文字列として用意するため、変数=’’’ ’’’とする
html_body =’’’
<html>
<head>
<meta charset="utf-8">
<title>受信したデータを表示</title>
<style>
h1 {
font-size: 3em;
}
</style>
</head>
<body>
<h1>%s</h1>←%sを使えば、出力する文章の中に任意の文字列をプレースホルダーとして入れ込むことができます。
</body>
</html>’’’

form = cgi.FieldStorage()
text = form.getvalue('text',’ ’)←送られてきたデータ
#出力
print(html_body % (text))

【実行】
1)Webサーバを立ち上げる
Microsoft Windows [Version 10.0.19042.928]
(c) Microsoft Corporation. All rights reserved.

C:\Users\shyok>cd/d d:

D:\>cd D:\pg\Python38

D:\pg\Python38>python -m http.server --cgi
Serving HTTP on :: port 8000 (http://[::]:8000/) ...

2)ブラウザを開いて
・URL欄に「http://localhost:8000/cgiValueTest.html」を書いて、クリック

・クエリ送信をクリックする

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする