Mac OS X+Apache+MySQL+Pythonで何かやってみた 〜ソースコード備忘録編〜

2011年8月31日水曜日

t f B! P L
【環境】
Mac OS X 10.6.8 Snow Leopard
Apache 2.2.19 + mod_python26 3.3.1
MySQL 5.1.57 + MySQL Server 5.1.57
Python 2.6.7 + py26-mysql 1.2.3
(ソフトはすべてMacPorts 2.0でインストール)

#!/opt/local/bin/python
# coding: utf_8

# インポート
import cgi
import MySQLdb

# クエリ取得
form = cgi.FieldStorage()
name = u'名無しさん'
if form.has_key('name'):
  name = form.getvalue('name').decode('utf_8')

# HTMLヘッダ出力
print 'content-type: text/html; charset=utf-8\n'
print '<!DOCTYPE html><html lang="ja"><head><meta charset="utf-8">' \
      '<title>PythonからMySQLの操作テスト</title></head><body>'

# DB接続
con = MySQLdb.connect(user='test', passwd='test', db='test', charset='utf8')
cur = con.cursor()

# レコード挿入
cur.execute(u"INSERT INTO test (val) VALUES ('%s')" % (name))

# クエリ表示
print '<div>こんにちは、' + name.encode('utf_8') + '!</div>'

# テーブル取得
cur.execute('SELECT * FROM test')
rows = cur.fetchall()
for row in rows:
  print '<div>' + row[0].encode('utf_8') + '</div>'

# DB接続解除
con.close()

# HTMLフッタ出力
print '</body></html>'
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>HTMLフォームからPythonの呼び出しテスト</title>
  </head>
  <body>
    <form action="./cgi-bin/test.py" method="post">
      <div>
        <input id="name" name="name" type="text">
        <input type="submit" value="post">
      </div>
    </form>
  </body>
</html>
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>JavaScriptからPythonの呼び出しテスト</title>
    <script type="text/javascript">
      // メイン関数
      function run(method, sync) {
        var value = 'name=' + document.getElementById('name').value;
        var start = new Date();
        var req   = createHTTPRequest();
        var path  = './cgi-bin/test.py';
        if (method == 'get') {
          path += '?' + value;
        }
        req.open(method, path, sync);
        req.onreadystatechange = function() { 
          if (req.readyState == 4) { 
            run_callback(req);
          }
        }
        req.setRequestHeader('content-type',
                             'application/x-www-form-urlencoded');
        if (method == 'get') {
          req.send(null);
        } else {
          req.send(value);
        }
        var end = new Date();
        document.getElementById('time').innerHTML =
          '処理時間:' + (end - start) + 'ms';
      }

      // コールバック関数
      function run_callback(req) {
        document.getElementById('result').innerHTML  = req.responseText;
      }

      // リクエスト生成関数
      function createHTTPRequest() {
        if (window.ActiveXObject && !window.XMLHttpRequest) {
          try {
            return (new ActiveXObject('Msxml2.XMLHTTP'));
          } catch (e) {
            ;
          }
          try {
            return (new ActiveXObject('Microsoft.XMLHTTP'));
          } catch (e) {
            ;
          }
          return null;
        } else if (window.XMLHttpRequest) {
          return (new XMLHttpRequest);
        } else {
          return null;
        }
      }
    </script>
  </head>
  <body>
    <div>
      <input type="text" id="name">
      <input type="button" value="GET(同期)"    onclick="run('get',  false)">
      <input type="button" value="GET(非同期)"  onclick="run('get',  true)">
      <input type="button" value="POST(同期)"   onclick="run('post', false)">
      <input type="button" value="POST(非同期)" onclick="run('post', true)">
      <span id="time"></span>
    </div>
    <div id="result" style="border:1px solid black">
      no data
    </div>
  </body>
</html>

おしまい。

フォロワー

QooQ