前提・実現したいこと
PythonにてCGIスクリプトを記述する練習をしており、
指南書片手にサンプルプログラムを書いているのですが、
指南書に書いてある動作を実現できず困っております。
ブラウザ上のテキストボックスへ任意の文字列を入力した後、
「送信」ボタンを押すと画面が切り替わり、
テキストボックスに入力された文字列を表示する、
という単純な内容です。
※当方、プログラミング初心者につき、単語の理解等不十分なため、
違和感、誤りのある文章となってしまっているかもしれませんが、
何卒ご容赦ください。
発生している問題・エラーメッセージ
www
┣test.html
┗cgi-bin
..┗input.py
上記のフォルダの構造でwww上でcmdより
「python -m http.server --cgi 8000」と入力し、サーバを起動。
ブラウザのURL欄に「http://127.0.0.1:8000/test.html」と入力し、
htmlファイルを開き、テキストボックスに「あいうえお」と入力。
「送信」ボタンをクリックすると画面は切り替わるのですが、
文字列は表示されていない真っ白な画面で、タイトルもコード内で指定した
「受信したデータを表示」ではなく
「http://127.0.0.1:8000/cgi-bin/input.py」と表示されてしまいます。
また、画面遷移したあとにブラウザからinput.pyのソースを確認しようとすると、
cgi-bin>input.pyの階層は認識しているようなのですが、input.pyの中身が空のように見えています。
該当のソースコード
【test.html】
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="Shift_JIS"> <title>CGIテスト</title> </head> <body> <h1>テキストテスト</h1> <form action="/cgi-bin/input.py" method="POST"> <p><label>テキスト入力:<input type="text" name="mytext" size="20"></p> <p><input type="submit" value="送信"></p> </form> </body> </html>【input.py】
import cgi
import sys
import io
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='shift_jis')
html_body="""
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="Shift_JIS"> <title>受信したデータを表示</title> </head> <body> <h1>%s</h1> </body> </html> """ form=cgi.FieldStorage() s=form.getvalue('mytext','') print(html_body % s)試したこと
文字コードの関係かと思い、コード上のShift_JISを
UTF-8に変えてみましたが、改善せず。
###実行環境
・Windows10
・Python 3.8