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>
おしまい。