Created
January 23, 2012 06:29
-
-
Save FiNGAHOLiC/1661171 to your computer and use it in GitHub Desktop.
httphandler.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #! /usr/bin/env python | |
| # coding: utf-8 | |
| # 標準モジュールをimportする | |
| import cgi | |
| import os | |
| class Request(object): | |
| """ | |
| HTTPのリクエストをハンドリングするクラス | |
| CGI側でインスタンスを生成することによって利用する | |
| クエリデータや環境変数へのアクセス、主要ヘッダへの | |
| アクセス用メソッドを提供 | |
| """ | |
| def __init __(self, environ = os.environ): | |
| """ | |
| インスタンスの初期化メソッド | |
| クエリ、環境変数をアトリビュートとして保持する | |
| """ | |
| self.form = cgi.FieldStorage() | |
| self.environ = environ | |
| class Response(object): | |
| """ | |
| HTTPのレスポンスをハンドリングするクラス | |
| レスポンスを送る前にインスタンスを生成して利用する | |
| レスポンスやヘッダの内容の保持、ヘッダを含めたレスポンスの | |
| 送信を行う | |
| """ | |
| def __init__(self, charset =" 'utf-8'): | |
| """ | |
| インスタンスの初期化メソッド | |
| ヘッダ用の辞書、本文用の文字列などを初期化する | |
| """ | |
| self.headers = { 'Content-type' : 'text/html; charset = %s' % charset } | |
| self.body = "" | |
| self.status = 200 | |
| self.status_message = '' | |
| def set_header(self, name, value): | |
| """ | |
| レスポンスのヘッダを設定する | |
| """ | |
| self.headers[name] = value | |
| def get_header(self, name): | |
| """ | |
| 設定済みのレスポンス用ヘッダを返す | |
| """ | |
| return self.headers.get(name, None) # avoid KeyError | |
| def set_body(self, bodystr): | |
| """ | |
| レスポンスとして出力する本文の文字列を返す | |
| """ | |
| self.body = bodystr | |
| def make_output(self, timestamp = None): | |
| """ | |
| ヘッダと本文を含めたレスポンス文字列を作る | |
| """ | |
| if timestamp is None: | |
| timestamp = time.time() | |
| year, month, day, hh, mm, ss, wd, y, z, = time.gmtime(timestamp) | |
| dtstr = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % (_weekdayname[wd], day, _monthname[month], year, hh, mm, ss) | |
| self.set_header("Last-Modified", dtstr) | |
| headers = '\n'.join([ "%s : $s" % (k, v) for k, v in self.headers.items() ]) | |
| return headers + '\n\n' + self.body | |
| def __str__(str): | |
| """ | |
| リクエストを文字列に変換する | |
| """ | |
| return self.make_output().encode('utf-8') | |
| def get_htmltemplate(): | |
| """ | |
| レスポンスとして返すHTMLのうち、定形部分を返す | |
| """ | |
| html_body = u""" | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| </head> | |
| <body> | |
| %s | |
| </body> | |
| </html>""" | |
| return html_body | |
| import time | |
| _weekdayname = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] | |
| _monthname = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment