python-cgiって、どんな時に使うんですか・・・?
python-cgiを使うことで、Web画面の処理も定義することができる。
あわせて使い方も解説しよう。
✔️ 本記事のテーマ
python-cgiライブラリを使って、画面の処理を定義する方法
✔️ 読者さんへの前置きメッセージ
本記事は「python-cgiライブラリの使い方」について書いています。
この記事を読むことで
「pythonで、サーバーの処理 & 画面の処理を書く方法」
をイメージできるようになります。
python-cgiは昔からあるライブラリで、Webツールなどの開発などで使われてきました。
python-cgiを使うことで、サーバーの処理だけでなく、画面の処理も定義することができます。
使い方は比較的簡単なので、初心者にも優しいライブラリです。
それでは、使い方を詳しく解説していきましょう。
python-cgiとは?
Python Common Gateway Interfaceの略称です。
Webサーバが、Webブラウザの要求に応じて、
外部プログラムを呼び出し、その実行結果をWebブラウザに送信する仕組みです。
Python-cgiを使うことで「ブラウザでのユーザーの選択によって、サーバー側で行う処理を振り分けて、プログラムを実行する」みたいなことが可能になります。
ちょうどこの画像のようなことが可能になります。
Pythonはサーバーサイド言語なので、
Python単体ではWebブラウザでの挙動は定義することができません。
ところがPython-cgiを使うことで、
Webブラウザでの挙動も定義することが可能になります。
すなわち、python-cgiを使うことで処理の幅が広がると言えます。
ぜひ使い方をマスターしておきたいライブラリの一つです。
次章以降でその使い方を解説していきましょう。
python-cgiの使い方
Python-cgiはいくつかの決まったルールに従って、使う必要があります。
そのルールを順に解説していきましょう。
ディレクトリ構成
python-cgiのディレクトリ構成は、基本的に以下の通りにする必要があります。
├── cgiserver.py
├── cgi-bin
│ └── test.py
└── html
├── view_001.html
└── view_002.html
cgiserver.py
cgiserver.pyはpython-cgiが動くための「おまじない」のようなものです。
このファイルの中身は以下の通りに書いておきましょう。
\# -*- coding: utf-8 -*-
import http.server
http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
このように書いておくことで、python-cgiを正しく動かすことができます。
test.py
このファイルで処理を定義します。
なお、ファイル名はなんでもOKです。今回は便宜的に「test.py」としています。
具体的にどのようにコードを書いていけば良いかは、サンプルコードとともに解説します。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cgi
import codecs
form = cgi.FieldStorage()
# 初回ロード時
if form.list == []:
html = codecs.open('./html/view_001.html', 'r', 'utf-8').read()
# SUBMITボタン押下時
else:
html = codecs.open('./html/view_002.html', 'r', 'utf-8').read()
print("")
print(html)
ライブラリのインポート
import cgi
Pythonの標準ライブラリであるcgiモジュールをインポートすることで、
python-cgiを使えるようになります。
画面への出力
print()
python-cgiを使用した時のprint()の出力は標準出力ではなく、Web画面への描画になります。
サンプルコードでは、print()にhtmlタグを渡すことでWebページを表現しています。
HTMLファイルの読み込み
codecs.open()
描画するhtmlファイルの内容を(String型として)読み込みます。
それを最後にprint()に渡すことでWeb画面に描画します。
FieldStorafeクラスを使う
cgi.FieldStorafe()
このクラスをインスタンス化することで、クライアント側のフォームの情報を取得できます。
この取得した情報によって処理を分岐することで、描画するHTMLを振り分けています。
HTMLの定義
python-cgiを使うことで、WEB画面上の動きも定義できます。
今回の例では、WEB画面に描画するためのhtmlは別ファイルとして定義しています。
例えば、view_001.htmlとして以下のようにhtmlファイルを作成しておくことでWebブラウザにはボタンとテキストが表示されます。
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
<title>topPage</title>
</head>
<p>This is Top Page.</p>
<form name="formSubmit" action="test.py">
<input type="submit" name="button" value="SUBMIT">
</form>
</body>
</html>
python-cgi の動かし方
cgiserver.pyがある階層まで移動して以下のコマンドを実行することで、
Pythonサーバーを立ち上げることができます。
python -m http.server --cgi
その状態でURLを指定してアクセスします。
http://localhost:8000/cgi-bin/cgibin.py
すると、Pythonファイルで出力しているhtmlがブラウザに表示されます。
このようにして、python-cgiを動かすことができます。
DockerやHerokuなどで本番運用するときは、
先ほどのコマンドを実行するように設定しておけばpython-cgiが動きます。
特にHerokuなどはPythonとの相性も良いので、
python-cgiを使って簡単なアプリケーションを作るのに向いています。
参考記事:「HerokuとPythonは相性が良いという話」
Pythonについてもっとスキルをつけるなら
今回はpython-cgiの使い方について解説しました。
Pythonをマスターすることで多くのことをプログラムで実現できます。
Pythonを深く網羅的に学ぶためには以下の書籍がオススメです。
この書籍はPythonについてかなり深く、そして丁寧に書かれています。
Python の基本文法だけでなく、
いかにして Python の持つ力を最大限引き出せるかという視点で書かれています。
Python 初心者はもちろん、すでに Python を使える方にもオススメの一冊です。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント