python-cgiを使って、画面遷移を定義する(コード付き)

python-cgiを使って、画面遷移を定義するPython
ゆうすけ
ゆうすけ

python-cgiって、どんな時に使うんですか・・・?

資格マフィア
資格マフィア

python-cgiを使うことで、Web画面の処理も定義することができる。
あわせて使い方も解説しよう。


✔️ 本記事のテーマ

 python-cgiライブラリを使って、画面の処理を定義する方法

 

✔️ 読者さんへの前置きメッセージ


本記事は「python-cgiライブラリの使い方」について書いています。

 

この記事を読むことで
「pythonで、サーバーの処理 & 画面の処理を書く方法」
をイメージできるようになります。

 

python-cgiは昔からあるライブラリで、Webツールなどの開発などで使われてきました。

 

python-cgiを使うことで、サーバーの処理だけでなく、画面の処理も定義することができます。

 

使い方は比較的簡単なので、初心者にも優しいライブラリです。

 

それでは、使い方を詳しく解説していきましょう。

 

python-cgiとは?

python-cgiとは?

Python Common Gateway Interfaceの略称です。

 

Webサーバが、Webブラウザの要求に応じて、
外部プログラムを呼び出し、その実行結果をWebブラウザに送信する仕組みです。

 

Python-cgiを使うことで「ブラウザでのユーザーの選択によって、サーバー側で行う処理を振り分けて、プログラムを実行する」みたいなことが可能になります。

 

ちょうどこの画像のようなことが可能になります。


python-cgiの挙動

 

Pythonはサーバーサイド言語なので、
Python単体ではWebブラウザでの挙動は定義することができません。

 

ところがPython-cgiを使うことで、
Webブラウザでの挙動も定義することが可能になります。

 

すなわち、python-cgiを使うことで処理の幅が広がると言えます。

 

ぜひ使い方をマスターしておきたいライブラリの一つです。

 

次章以降でその使い方を解説していきましょう。

 

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 の動かし方

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についてもっとスキルをつけるなら

今回はpython-cgiの使い方について解説しました。

 

Pythonをマスターすることで多くのことをプログラムで実現できます。

 

Pythonを深く網羅的に学ぶためには以下の書籍がオススメです。

 

この書籍はPythonについてかなり深く、そして丁寧に書かれています。

Python の基本文法だけでなく、

いかにして Python の持つ力を最大限引き出せるかという視点で書かれています。

 

Python 初心者はもちろん、すでに Python を使える方にもオススメの一冊です。

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

タイトルとURLをコピーしました