質問編集履歴

2 「送信」ボタン押下後の白画面のスクショ追加、ブラウザからPythonのソースコードを確認しようとすると何も表示されていない旨の追記

PonpokopoNosuke

PonpokopoNosuke score 0

2020/10/24 21:51  投稿

### 前提・実現したいこと
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」と表示されてしまいます。
また、画面遷移したあとにブラウザからF12よりinput.pyのソースを確認しようとすると、
また、画面遷移したあとにブラウザからinput.pyのソースを確認しようとすると、
cgi-bin>input.pyの階層は認識しているようなのですが、input.pyの中身が空のように見えています。
![イメージ説明](7fce85b87d58fc15a5835b101c801e38.png)  
### 該当のソースコード
【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
  • Python

    33326 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • CGI

    160 questions

    CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

1

PonpokopoNosuke

PonpokopoNosuke score 0

2020/10/24 08:32  投稿

PythonのCGIスクリプトをブラウザから呼び出した際にCGIスクリプトを読み込めていない?件
### 前提・実現したいこと
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」と表示されてしまいます。
 
また、画面遷移したあとにブラウザからF12より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に変えてみましたが、改善せず。
UTF-8に変えてみましたが、改善せず。
###実行環境
・Windows10
・Python 3.8
  • Python

    33326 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • CGI

    160 questions

    CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る