def を使用して ファイルにログを書き込む処理を定義し、REQUEST_METHOD で判断して POST 時にリダイレクトを行います XAMPP で Python を実行できるようにするには、httpd.conf の 『AddHandler cgi-script .cgi .pl .asp』 に .py を追加します Windows では、Python の先頭に Python の実行プログラムの場所を記述しなくても、Windows のレジストリに設定して動作できるようにする事ができるようです ( 💘 ScriptInterpreterSource Registry-Strict ) Python のダウンロードとインストールは こちら(Windows 環境のPython) がとても参考になります sample_04.py REQUEST_METHOD を取得して、POST 時に HTTP ヘッダにリダイレクト処理を入れたり、ログ出力を実行するようにしています
if method == "POST": print( "Location: sample_04.py?field3=%E5%B1%B1%E7%94%B0%20%E5%A4%AA%E9%83%8E" )
#!C:\python\python.exe import cgi import cgitb cgitb.enable() import sys import io import os import urllib.parse from xml.sax.saxutils import * # ************************************** # ログ出力 # ************************************** def log( message ): with open('debug.log', 'a') as f: print(message,end='\n',file=f) sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') method = os.environ["REQUEST_METHOD"] print("Content-Type: text/html; charset=utf-8") print( "Expires: Thu, 19 Nov 1981 08:52:00 GMT" ) print( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" ) print( "Pragma: no-cache" ) if method == "POST": print( "Location: sample_04.py?field3=%E5%B1%B1%E7%94%B0%20%E5%A4%AA%E9%83%8E" ) print() form = cgi.FieldStorage() # form 用データの内容です result = str(form) + "<br>" if method == "POST": log( form ) form_data = {} fields = [ "field1", "field2", "field3", "field4", "send" ] for field_name in fields: if field_name not in form: form_data[field_name] = "" else: form_data[field_name] = form.getvalue(field_name) # 以降で使用可能なディクショナリの内容です result += str(form_data) + "<br>" if method == "POST": log( form_data ) view = f"""<!DOCTYPE html> <html> <head> <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"> <meta charset="UTF-8"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"> <style> #main {{ padding: 30px; font-size: 24px; }} form {{ margin-bottom: 20px; }} .inline {{ display: inline-block; }} .ttl {{ width: 100px; }} </style> </head> <body> <div id="main"> <form method="post"> <div> <div class="inline ttl">氏名</div> <div class="inline"><input type="text" name="field3" value="{form_data["field3"]}"></div> </div> <div> <div class="inline ttl">フリガナ</div> <div class="inline"><input type="text" name="field4" value="{form_data["field4"]}"></div> <div class="inline ml-2"><input type="submit" name="send" value="送信"></div> </div> </form> {result} </div> </body> </html>""" print(view)
関連する記事 XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 1 ) XAMPP + Python( 3.8 ) でWEBアプリの基礎部分構築 : その ( 2 ) : QUERY_STRING と 画面定義 XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 3 ) : cgi.FieldStorage() から ディクショナリ XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 4 ) : リダイレクトと関数とログ出力
|
【Pythonの最新記事】
- Python : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- Python : shift_jis の3列の csv フォーマットのデータを ttk.Treeview に表示する
- Python : ttk.Treeview で表形式を使用して環境変数の一覧表示
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 1 )
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 3 ) : cgi.FieldStorage() から ディクショナリ
- XAMPP + Python( 3.8 ) でWEBアプリの基礎部分構築 : その ( 2 ) : QUERY_STRING と 画面定義
- Python + MySQL + IFRAME + Bootstrap : 問い合せ WEB アプリテンプレート
- MySQL Connector/Python の使用方法概要のまとめ
- Python3 : 言語的デザインの特徴と要点
- Python ドキュメントに沿った、テキストファイル読み込みの理解
- Python3 でメール送信 ( さくらインターネット )
- Python 3.6 で GET/POST メソッドを想定した CGI 用の簡易テンプレートを作成してみました
- Eclipse + Python(Pydev) : pywin32(COM使用の為) + MySQL Connector/ODBC でループ処理をしながら更新
- Eclipse + Python(Pydev) : MySQL Connector/Python でループ処理をしながら更新
- Pleiades Eclipse 4.7 Oxygen で Python を使って MySQL にアクセスする
- Python 3.4 : インストールと最初にする事( Windows )
- Python3.x : URL を読み出す( bytes から string )
- Python3.1 : URLを読み出して、バイナリのままファイル出力する
- Python3.1 : クッキーを保持して二つの URL にアクセスする
- Python3.1 : URLを読み出してファイルに出力