100 likes | 266 Vues
Dive into the world of CGI programming with Python in this extensive guide by Gouichi Iisaka. Learn how to leverage essential modules and tools like http, HTML generation, and JPython for creating dynamic web applications. Explore the capabilities of SSL extensions and mod_python, and discover how to develop efficient, high-performance web-based applications using Python's rich libraries. This resource is perfect for developers looking to enhance their skills in CGI and Python programming.
E N D
CGI Programming with Python Gouichi Iisaka The Company was called Cray Research Japan Co., Ltd.
CGIのためのモジュール • CGI • httplib • HTMLgen • Bobo、BoboPOS • Document Template http://www.python.org/download/Contributed.html#netweb
CGIのためのモジュール • JPython: Javaプラットホームで動作 • SSL Extensionhttp://www.as.cmu.edu/~geek/python-ssl.html • mod_pyapachehttp://www.msg.com.mx/pyapache/ http://www.python.org/download/Contributed.html#netweb
Grail • すべてPythonで記述されたWebブラウザJava の HotJava に相当 • Pythonコードをアプレットとして実行可能
JPython • 100% Pure Java • Pythonコードをアプレットとして実行可能 • 既存のJavaクラスライブラリも利用可能 • Javaに比べて2~10倍の開発効率 • OpenSource • 対応ブラウザ: • SUN HotJava • Microsoft Internet Explore4.0 • Netscape Navigator 4.06 以上
Jpythonサンプルコード from java import awt, applet class ButtonDemo(applet.Applet): def init(self): self.b1 = awt.Button('Disable middle button',actionPerformed=self.disable) self.b2 = awt.Button('Middle button') self.b3 = awt.Button('Enable middle button', enabled=0, actionPerformed=self.enable) self.add(self.b1) self.add(self.b2) self.add(self.b3) def enable(self, event): self.b1.enabled = self.b2.enabled = 1 self.b3.enabled = 0 def disable(self, event): self.b1.enabled = self.b2.enabled = 0 self.b3.enabled = 1
Jpythonサンプルコード from java import awt, applet class CheckboxDemo(applet.Applet): def init(self): cb1 = awt.Checkbox('Checkbox 1') cb2 = awt.Checkbox('Checkbox 2') cb3 = awt.Checkbox('Checkbox 3', state=1) p1 = awt.Panel(layout=awt.FlowLayout()) p1.add(cb1) p1.add(cb2) p1.add(cb3) cbg = awt.CheckboxGroup() cb4 = awt.Checkbox('Checkbox 4', cbg, 0) cb5 = awt.Checkbox('Checkbox 5', cbg, 0) cb6 = awt.Checkbox('Checkbox 6', cbg, 0) p2 = awt.Panel(layout=awt.FlowLayout()) p2.add(cb4) p2.add(cb5) p2.add(cb6) self.setLayout(awt.GridLayout(0, 2)) self.add(p1) self.add(p2) self.validate()
CGIモジュール form = cgi.FieldStorage() form_ok = 0 if form.has_key("name") and form.has_key("addr"): if form["name"].value != "" and form["addr"].value != "": form_ok = 1 if not form_ok: print "<H1>Error</H1>" print "Please fill in the name and addr fields.” return …他の手続き...
CGIのデバッグ • try … except の前でtracebackをインポート • sys.stderr を sys.stdout に割り付ける • ヘッダとブランク行が出力されることを確認 • デバッグするコードを try … except で囲む • exceptの中で traceback.print_exc() を呼ぶ
CGIのデバッグ import sys import traceback print ”Content-type: text/html” print sys.stderr = sys.stdout try: … デバッグしたいコード… except: print print ”<PRE>” traceback.print_exc()