Pythonウェブサーバーをマスターする:SimpleからCGIまでの完全ガイド

皆さん、ウェブ開発の世界に一歩を踏み出しましたか? 時には複雑で難しく見えるこの道、Pythonと一緒なら、思ったよりずっと楽しい旅になるはずです。 今日は パイソン シンプルなファイルサーバーから動的なコンテンツを提供するCGIサーバーまで、Pythonでできることすべてを掘り下げていきます。 さあ、Python Webサーバーの世界に飛び込んでみましょう。
Pythonウェブサーバーの種類
Pythonは色んなウェブサーバーの実装方法を提供します。それぞれの特徴と使い方を詳しく説明します。
1.SimpleHTTPRequestHandler
最もシンプルかつ強力なPythonウェブサーバーです。主に静的ファイルをサービスするために使われます。
#simpleServer.py
from http.server import HTTPServer, SimpleHTTPRequestHandler
osをインポート
def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
server_address = ('', 8000)
os.chdir('your_directory') # サービスするディレクトリに変更します。
httpd = server_class(server_address, handler_class)
print("サーバーが http://localhost:8000/ で実行中です。")
httpd.serve_forever()
if __name__ == '__main__':
run()Windows基準でcmdウィンドウでpython simpleServer.pyコマンドを入力してこのコードを実行すると、指定したディレクトリ(your_directory)のファイルをウェブでサービスします。ブラウザで http://localhost:8000でアクセスするとファイル一覧が表示されます。
2.BaseHTTPRequestHandler
より細かい制御が必要な場合に使用します。リクエストの処理方法を直接定義することができます。
http.server from http.server import HTTPServer, BaseHTTPRequestHandler
クラス MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"<html><body><h1>マイサーバーへようこそ!</h1></body></html>")
def run(server_class=HTTPServer, handler_class=MyHandler):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
print("サーバーが http://localhost:8000/ で実行中です。")
httpd.serve_forever()
if __name__ == '__main__':
run()このサーバーはすべてのGETリクエストに対して簡単なHTMLページ(Welcome to My Server!表示)を応答として送ります。1番のように実行して確認してみてください。
3. CGIHTTPRequestHandler
CGI(Common Gateway Interface)スクリプトを実行できるサーバーです。動的コンテンツ生成に使われます。
from http.server import HTTPServer, CGIHTTPRequestHandler
import os
def run(server_class=HTTPServer, handler_class=CGIHTTPRequestHandler):
server_address = ('', 8000)
handler_class.cgi_directories = ['/cgi-bin']].
os.chdir('your_web_root') # ウェブルートディレクトリに変更する。
httpd = server_class(server_address, handler_class)
print("CGIサーバーが http://localhost:8000/ で実行中です。")
httpd.serve_forever()
if __name__ == '__main__':
run()このサーバーを使うためには'cgi-bin'ディレクトリを作ってその中にCGIスクリプトを入れる必要があります。 さて、CGIスクリプトについて詳しく説明しましょう。
CGIスクリプトの作成
CGIスクリプトは動的なコンテンツを生成するプログラムです。PythonでCGIスクリプトを書いてみましょう。
- まず'cgi-bin'ディレクトリを作成します。
- その中に'hello.py'ファイルを作成し、次の内容を入力します:
#!/usr/bin/env python3
print("Content-Type: text/html")
print()
print("<html>")
print("<head><title>Hello CGI</title></head>")
print("<body>")
print("<h1>こんにちは、CGIワールド!</h1>")
print("</body>")
print("</html>")- このファイルに実行権限を付与します(Unixシステムの場合)。
chmod +x cgi-bin/hello.pyこれで、ブラウザで http://localhost:8000/cgi-bin/hello.pyにアクセスすると、"Hello, CGI World!" というメッセージが表示されます。
コード詳細解説
CGIスクリプトの各行を詳しく見てみましょう。
#!/usr/bin/env python3
- シェバン(shebang)行で、このスクリプトを実行するインタプリタを指定します。
print("Content-Type: text/html")
- HTTPヘッダを出力します。この場合、コンテンツタイプがHTMLであることを知らせます。
print()
- 空行を出力してヘッダと本文を区別します。
その他 print() ドア
- HTMLコンテンツを生成します。
この簡単なスクリプトで動的なウェブページを作ることができます。データベース連動、フォーム処理など、より複雑な作業も可能です。

WSGIサーバー
WSGI(Web Server Gateway Interface)は、Pythonウェブアプリケーションとウェブサーバー間の標準インターフェースを定義します。WSGIを使うと、ウェブサーバーとPythonウェブアプリケーションを簡単に接続することができます。
次は wsgiref モジュールを使った簡単なWSGIサーバーの例です。
wsgiref.simple_server from wsgiref.simple_server import make_server
def simple_app(environ, start_response):
status = '200 OK'
headers = [('Content-Type', 'text/plain')].
start_response(status, headers)
response_body = 'Hello, World!
return [response_body.encode('utf-8')].
# WSGIサーバー作成
server = make_server('localhost', 8000, simple_app)
print("Serving on port 8000...")
#サーバー起動
server.serve_forever()このコードは次のようなコンポーネントで構成されています。
simple_app: WSGIアプリケーション関数で、HTTPリクエストを処理し、応答を生成します。make_server: WSGIサーバーを生成する関数です。server.serve_forever(): サーバーを起動し、リクエストを処理し続けます。
実行結果
このコードを実行すると、次のような出力がコンソールに表示されます。
ポート8000で提供...これは、サーバーが正常に起動し、8000番ポートでリクエストを待っていることを示しています。
サーバーテスト
上記のコード実行後、ウェブブラウザで http://localhost:8000にアクセスすると、「Hello, World!」というメッセージが表示されます。これは simple_app 関数がすべてのリクエストに対してこのメッセージを返すように設定されているからです。
WSGIサーバーの動作原理
- クライアントからHTTPリクエストが来ると、WSGIサーバーはそれを受け取ります。
- サーバーはリクエスト情報を
環境辞書に収めてWSGIアプリケーション(simple_app)に転送します。 start_response関数を使ってステータスコードとヘッダを設定します。- WSGIアプリケーションは応答本文を返します。
- サーバーはこの応答をクライアントに送信します。
このように、WSGIサーバーはウェブサーバーとPythonアプリケーション間の仲介の役割を果たし、標準化されたインターフェースを提供し、様々なウェブフレームワークとサーバー間の互換性を保証します。
Pythonウェブサーバーの短所と長所
Python ウェブサーバーには多くの利点があります
- 実装が簡単で速い
- Pythonの豊富なライブラリを活用可能
- 学習曲線が緩やか
しかし、デメリットもあります。
- 大規模なトラフィック処理には不向き
- セキュリティ設定が基本的に不十分
それにもかかわらず、開発段階や小規模なプロジェクトでは、Python Webサーバーは素晴らしい選択かもしれません。
皆さん、これでPythonウェブサーバーの基礎からCGIスクリプトの作成まで学びました。 どうですか? 思ったより難しくないですよね? さて、次は自分のウェブサーバーを作る番です。
Pythonウェブサーバーは単なるツールではありません。 あなたの創造性を世界とつなぐ強力な媒体です。 今すぐPythonウェブサーバーを実行してみましょう。あなただけのウェブ世界が広がることでしょう!
最後に、ウェブ開発の旅には終わりがありません。 学び続け、実験し、成長し続けましょう。あなたの次のプロジェクトが世界を驚かせるかもしれません。頑張ってください!!!
参考までに、ウェブサーバー関連の知識を習得したので、今度は本格的にウェブサイトを作る情報も一度習得してみてはいかがでしょうか? PythonでDjangoのウェブサイトを作る:初心者向けガイド ポストで確認してみてください〜!






