Pythonコアプログラミングノート--Webプログラミング:CGIとWSDi(一)
5938 ワード
文書ディレクトリ Webサーバによるクライアントデータの処理を支援する CGI概要 CGIアプリケーション cgiモジュール cgitbモジュール CGIアプリケーションの構築 静的フォームページ ダイナミックフォームページ 完全にインタラクティブなテキストサイト Webサーバによるクライアントデータの処理を支援
CGIの概要
.Webの最初の目的は、世界中でドキュメントをオンラインで保存し、アーカイブすることです(多くは教育と科学研究に使用されています).これらのファイルは通常静的テキストで表され、一般的にHTMLである.インターネットとWebサービスの発展に伴い,閲覧のほかにユーザの入力を処理する必要がある.現在のサーバの処理過程は一般的に、第1ステップのWebサーバがクライアントから要求(GETまたはPOST)を受信し、対応するプログラムを呼び出す.そしてHTMLページを待つと同時にクライアントも待っています.アプリケーションの処理が完了すると、動的に生成されたHTMLページがサーバ側に返されます.その後、サーバはこの結果をユーザーに返します.HTMLを作成するCGIアプリケーションは、通常、高度なプログラミング言語で実現され、ユーザーデータを受け入れ、処理し、サーバ側にHTMLページを返すことができます.CGIに触れる前に、一般的な生産環境のWebアプリケーションではCGIは使用されなくなったことを警告する必要があります.現在、Webサーバの典型的なコンポーネントには、Apacheと統合されたデータベース・アクセス・コンポーネント(MySQLまたはPostgreSQL)、Java(Tomcat)、PHP、PythonやRubyなどのさまざまな動的言語モジュール、SSL/securityがあります.
CGIアプリケーション
.CGIアプリケーションと典型的なアプリケーションは少し異なり、主な違いは入力、出力、およびユーザーとプログラムのインタラクションにある.CGIアプリケーションの入力は、サーバまたはハードディスクからではなく、Webクライアントから取得したユーザが提供するフォームデータである.CGIアプリケーションの出力は、画面、GUIウィンドウ、またはハードディスクに送信するのではなく、接続されたWebクライアントに送信されます.これらの返されるデータは、一連の有効なヘッダファイルを有するHTMLタグデータでなければならない.CGIアプリケーションでは、ユーザーとスクリプトの間には何のインタラクションもありません.すべてのインタラクションは、Webクライアント(ユーザの動作ベース)、Webサーバ側、およびCGIアプリケーション間で発生します.
cgiモジュール
.cgiモジュールには、すべての作業を完了するFieldStorageクラスという主要なクラスがあります.Python CGIスクリプトが起動されると、このクラスがインスタンス化されます.インスタンス化が完了すると、辞書のようなオブジェクトが含まれます.このオブジェクトには、フォームを介して入力されたフォームエントリの名前であり、値には対応するデータが含まれます.これらの値は、次の3つのオブジェクトのいずれかです.1.FieldStorageオブジェクト; 2.ファイルアップロードまたはmulitple-part形式のデータがない場合に使用される、MiniFieldStorageクラスという別の類似のインスタンス. 3.これらのオブジェクトのリストであってもよい.このオブジェクトは、フォーム内のフィールドに複数の入力値がある場合に生成されます.
cgitbモジュール
・Webサーバは、理解できない応答を受信すると、その応答を破棄して「500エラー」を返す.500は、内部サーバエラーが発生したことを示すHTTP応答符号化である.一般的に、サーバが実行するアプリケーションにエラーが発生しました.ブラウザで提示されたプロンプトメッセージは、空白または内部サーバエラーなどのメッセージが表示されます.Pythonプログラムがコマンドラインまたは統合開発環境(IDE)で実行されると、発生したエラーはトレースバックメッセージを生成し、エラーが発生した場所を示し、ブラウザにトレースバックメッセージは表示されません.ブラウザで「内部サーバエラー」ではなくWebアプリケーションの遡及情報を表示するには、cgitbモジュールを使用します.次のコードをCGIプログラムに挿入して呼び出すだけです.
CGIアプリケーションの構築
.PythonでCGI開発を行うためには、まず、Python CGIリクエストを処理し、WebサーバからCGIスクリプトにアクセスできるようにするWebサーバをインストールする必要があります.本番環境のサーバ.本格的なWebサーバが必要な場合は、Apache、ligHTTPD、thttpdをダウンロードしてインストールできます.ApacheにはPython CGIを処理できるプラグインやモジュールがたくさんあります.開発者サーバ.学習目的または小型Webサイトを構築するには、Python自身のWebサーバを使用するだけで十分であり、Python 3で構築する手順は以下の通りである.作成したフォルダの下でcmdウィンドウを開き、pythonコマンドウィンドウの下に入力します.
. 2.このフォルダの下に新しいフォルダを作成し、cgi-binと名前を付けます. 3.pythonスクリプトをフォルダの下に置くと、ブラウザに
静的フォーム・ページ
.次の例は、静的なページを作成し、ユーザーの入力を取得し、インタラクティブな動作を後のpythonスクリプトに渡し、処理結果を得た後に表示します.最初のステップ:静的ページを作成します.ポートを開いたフォルダディレクトリの下にfriendを作成します.htmlファイルは次のとおりです.
.第2のステップでは、cgi-binディレクトリの下にfriendsを作成する.pyスクリプト:
.ステップ3では、ブラウザ検索バー入力:
ダイナミックフォームページ
.次の例ではhtmlファイルを破棄し、フォームページと結果にpythonスクリプトが生成されます.
完全にインタラクティブなテキストサイト
.最後の例はコードに対してもっと完備して、ただ論理的で、新しい知識がありません:
CGIの概要
.Webの最初の目的は、世界中でドキュメントをオンラインで保存し、アーカイブすることです(多くは教育と科学研究に使用されています).これらのファイルは通常静的テキストで表され、一般的にHTMLである.インターネットとWebサービスの発展に伴い,閲覧のほかにユーザの入力を処理する必要がある.現在のサーバの処理過程は一般的に、第1ステップのWebサーバがクライアントから要求(GETまたはPOST)を受信し、対応するプログラムを呼び出す.そしてHTMLページを待つと同時にクライアントも待っています.アプリケーションの処理が完了すると、動的に生成されたHTMLページがサーバ側に返されます.その後、サーバはこの結果をユーザーに返します.HTMLを作成するCGIアプリケーションは、通常、高度なプログラミング言語で実現され、ユーザーデータを受け入れ、処理し、サーバ側にHTMLページを返すことができます.CGIに触れる前に、一般的な生産環境のWebアプリケーションではCGIは使用されなくなったことを警告する必要があります.現在、Webサーバの典型的なコンポーネントには、Apacheと統合されたデータベース・アクセス・コンポーネント(MySQLまたはPostgreSQL)、Java(Tomcat)、PHP、PythonやRubyなどのさまざまな動的言語モジュール、SSL/securityがあります.
CGIアプリケーション
.CGIアプリケーションと典型的なアプリケーションは少し異なり、主な違いは入力、出力、およびユーザーとプログラムのインタラクションにある.CGIアプリケーションの入力は、サーバまたはハードディスクからではなく、Webクライアントから取得したユーザが提供するフォームデータである.CGIアプリケーションの出力は、画面、GUIウィンドウ、またはハードディスクに送信するのではなく、接続されたWebクライアントに送信されます.これらの返されるデータは、一連の有効なヘッダファイルを有するHTMLタグデータでなければならない.CGIアプリケーションでは、ユーザーとスクリプトの間には何のインタラクションもありません.すべてのインタラクションは、Webクライアント(ユーザの動作ベース)、Webサーバ側、およびCGIアプリケーション間で発生します.
cgiモジュール
.cgiモジュールには、すべての作業を完了するFieldStorageクラスという主要なクラスがあります.Python CGIスクリプトが起動されると、このクラスがインスタンス化されます.インスタンス化が完了すると、辞書のようなオブジェクトが含まれます.このオブジェクトには、フォームを介して入力されたフォームエントリの名前であり、値には対応するデータが含まれます.これらの値は、次の3つのオブジェクトのいずれかです.1.FieldStorageオブジェクト; 2.ファイルアップロードまたはmulitple-part形式のデータがない場合に使用される、MiniFieldStorageクラスという別の類似のインスタンス. 3.これらのオブジェクトのリストであってもよい.このオブジェクトは、フォーム内のフィールドに複数の入力値がある場合に生成されます.
cgitbモジュール
・Webサーバは、理解できない応答を受信すると、その応答を破棄して「500エラー」を返す.500は、内部サーバエラーが発生したことを示すHTTP応答符号化である.一般的に、サーバが実行するアプリケーションにエラーが発生しました.ブラウザで提示されたプロンプトメッセージは、空白または内部サーバエラーなどのメッセージが表示されます.Pythonプログラムがコマンドラインまたは統合開発環境(IDE)で実行されると、発生したエラーはトレースバックメッセージを生成し、エラーが発生した場所を示し、ブラウザにトレースバックメッセージは表示されません.ブラウザで「内部サーバエラー」ではなくWebアプリケーションの遡及情報を表示するには、cgitbモジュールを使用します.次のコードをCGIプログラムに挿入して呼び出すだけです.
import cgitb
cgitb.enable()
CGIアプリケーションの構築
.PythonでCGI開発を行うためには、まず、Python CGIリクエストを処理し、WebサーバからCGIスクリプトにアクセスできるようにするWebサーバをインストールする必要があります.本番環境のサーバ.本格的なWebサーバが必要な場合は、Apache、ligHTTPD、thttpdをダウンロードしてインストールできます.ApacheにはPython CGIを処理できるプラグインやモジュールがたくさんあります.開発者サーバ.学習目的または小型Webサイトを構築するには、Python自身のWebサーバを使用するだけで十分であり、Python 3で構築する手順は以下の通りである.作成したフォルダの下でcmdウィンドウを開き、pythonコマンドウィンドウの下に入力します.
python -m http.server --cgi
. 2.このフォルダの下に新しいフォルダを作成し、cgi-binと名前を付けます. 3.pythonスクリプトをフォルダの下に置くと、ブラウザに
http://localhost:8000/cgi-bin/xxx.py
と入力して表示できます.静的フォーム・ページ
.次の例は、静的なページを作成し、ユーザーの入力を取得し、インタラクティブな動作を後のpythonスクリプトに渡し、処理結果を得た後に表示します.最初のステップ:静的ページを作成します.ポートを開いたフォルダディレクトリの下にfriendを作成します.htmlファイルは次のとおりです.
friends CGI demon
Friends list for:NEW user
.第2のステップでは、cgi-binディレクトリの下にfriendsを作成する.pyスクリプト:
import cgi
reshtml = '''Content-Type: text/html
Friends CGI demon (dynamic)
Friend list for:%s
Your name is: %s
you have %sfriends.
'''
form = cgi.FieldStorage()
who = form['person'].value
howmany = form['howmany'].value
print(reshtml % (who,who,howmany))
.ステップ3では、ブラウザ検索バー入力:
http://localhost:8000/friend.htm
lで静的ページを開いた後、対応するオプションを入力し、submitボタンをクリックするとpythonスクリプト生成結果ページが呼び出されます.ダイナミックフォームページ
.次の例ではhtmlファイルを破棄し、フォームページと結果にpythonスクリプトが生成されます.
import cgi
header = 'Content-Type: text/html
'
formhtml = '''
Friends CGI demon
Friends list for :new user
'''
fradio = '%s
'
def showForm():
friends = []
for i in (0,10,20,30,40):
checked = ''
if i == 0:
checked = 'CHECKED'
friends.append(fradio % (str(i),checked,str(i)))
print('%s%s' % (header,formhtml % ''.join(friends))) #join friends ''
reshtml = '''
Friends CGI demon
Friends list for:%s
your name is: %s
you have %s friends.
'''
def doresult(who,howmany):
print(header + reshtml % (who,who,howmany))
def process():
form = cgi.FieldStorage()
if 'person' in form:
who = form['person'].value
else:
who = 'new user'
if 'howmany' in form:
howmany = form['howmany'].value
else:
howmany = 0
if 'action' in form:
doresult(who,howmany)
else:
showForm()
if __name__ == '__main__':
process()
完全にインタラクティブなテキストサイト
.最後の例はコードに対してもっと完備して、ただ論理的で、新しい知識がありません:
import cgi
import urllib
header = 'Content-Type: text/html
'
url = "/cgi-bin/friendsc.py"
errhtml = '''html>
Friends CGI demon
Error
%s