さんまがおいしい季節だねー(´・ω・`)

コピペで覚える Python CGI の作り方

CGI,Python — タグ: , — さくら @ 2009/11/03 0:09

ちょっと前にツイッターで @kira88 たんから Python の記事のリクエストを受けたのですが、フォーマルな解説記事はその辺にいっぱいあるので、とりあえず例だけ貼っとこうかと思います。他の言語ご存知の方は、こっちの方が手っ取り早いでしょうww

コピペ元の前に、Windows の開発環境が必要な方はこちらが参考になるかと思いますが、ポックンうにっくす系メインなので詳しくは分かりません><

MOONGIFT: » Python開発をはじめたいWindows開発者は「Portable Python」:オープンソースを毎日紹介

Hello, World! 風

つーことでまずは Hello, World! 風 CGI。

#!/usr/local/bin/python

import cgi

def main():
    form = cgi.FieldStorage()
    name = form.getfirst("name", "")

    print "Content-Type: text/html; charset=utf-8"
    print
    print "<html><body>"
    if name:
        print "<p>Hello, %s</p>" % cgi.escape(name)
    print "<form method=\"post\">"
    print "<input type=\"text\" name=\"name\" value=\"%s\" />" % name
    print "<input type=\"submit\" />"
    print "</form>"
    print "</body></html>"

if __name__ == "__main__":
    main()

細かい説明とか…
要る?

MySQL で登録とか

Python で MySQL を使用する場合は MySQL for Python とかが要ります。(とかってのは、他にも MySQL 用のモジュールがあるよって意味です。)

レン鯖とかだと MySQL for Python モジュールを自分でインスコする必要があるかもしれませんが、さくらインターネットのように SetEnv できない環境だと、モジュール入れた後の設定が結構マンドクサイです。この辺については PYTHONPATHの挙動を正確に把握する – ぎじゅっやさん をご覧ください。

んでスクリプトの前に使ってるテーブルはこんな感じ。この辺手抜きなのは所詮サンプルですおww

CREATE TABLE test (name VARCHAR(200) PRIMARY KEY) CHARSET=utf8;

んで test テーブルを一覧表示してインスコするスクリプト。このスクリプトは日本語を含んでまして UTF-8 で動くようになってますので、ファイルの文字コードは UTF-8 にして保存してください。先頭の coding: utf-8 はいわゆる魔法の呪文ですww それと MySQLdb.connect の引数は、データベースの設定によって変える必要があります。

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import cgi
import os
import MySQLdb

def connect():
    return MySQLdb.connect(user='USER', passwd='PASSWD', db='DBNAME',
                           host='HOSTNAME', charset='utf8')

def get(form):
    conn = connect()

    print "Content-Type: text/html; charset=utf-8"
    print
    print "<html><body>"

    # 一覧表示
    cur = conn.cursor()
    cur.execute("SELECT name FROM test ORDER BY name")
    print "<ul>"
    for name, in cur:
        print "<li>%s</li>" % (name.encode("utf-8"))
    print "</ul>"

    # 登録用フォーム
    print """<form method="post">
            <input type="text" name="name" value="%s" />
            <input type="submit" />
        </form>""" % (cgi.escape(form.getfirst('name', '')))

    print "</body></html>"

def post(form):
    name = form.getfirst('name')
    if not name:
        get(form)
        return

    # DB に登録
    # キー重複したら 500 になるお
    conn = connect()
    cur = conn.cursor()
    cur.execute("INSERT INTO test (name) VALUES (%s)",
                (name.decode('utf-8'), ))

    # 結果表示みたいな
    print "Content-Type: text/html; charset=utf-8"
    print
    print "<html><body>"
    print "<p>登録しますた</p>"
    print("<p><a href=\"%s\">戻る</a></p>" %
          (cgi.escape(os.getenv("SCRIPT_NAME"))))
    print "</body></html>"

def main():
    form = cgi.FieldStorage()
    if os.getenv("REQUEST_METHOD") == "POST":
        post(form)
    else:
        get(form)

if __name__ == "__main__":
    main()

これくらい分かったら自分でスクリプト作れると思いますが、たぶんちゃんとした資料が要ると思いますのでリンク貼っときます。

  • Python ドキュメント – Python Japan User’s Group の有志の皆様による翻訳ドキュメント。Python 本体のことはだいたいこれ見れば解決します。
  • Python チュートリアル – 上記の Python ドキュメントに含まれるチュートリアル。ポックンの記事見るよりこっち見るのが正解ww
  • PyPI Python Package Index – Python のパッケージリポジトリ。読み方はパイパイです。大事なことなのでもう一度書きます。
    Python Package Index PyPI の正式な読み方はパイパイですwww
  • その他 – ググレカス!


んじゃ、ぱいぱーいwww

5件のコメント »

  1. 読ませていただいた!
    うーむ、パイパイも読み込んでみるお!
    ありがとありがと!

    コメント by kira88 — 2009 年 11 月 3 日 @ 00:32
  2. お暇なときにでも Python をお試しくださいw

    コメント by さくら — 2009 年 11 月 3 日 @ 01:03
  3. UOmvjiQPNYVkHRtwle 2690

    コメント by FxelIXNlWPjYIQK — 2014 年 10 月 5 日 @ 17:41
  4. I do consider all of the concepts you’ve introduced in your post.
    They are very convincing and can certainly work. Nonetheless, the posts are very quick
    for beginners. Could you please prolong them a little from subsequent
    time? Thank you for the post.

    コメント by Edythe — 2016 年 12 月 6 日 @ 04:17
  5. Youtube é a rede social que vai fazer você ganhar dinheiro graças a seus amigos e
    sua rede relacional.
    Imagine por um momento o potencial que espera
    por você.

    Com o Youtube, você finalmente alcançará sucesso e sucesso.

    Lembre-se que o seu futuro depende da sua capacidade de tomar a decisão certa: juntar-se a nós e entrar no Youtube.

    Se você não tem uma conta no Youtube, basta criar uma.

    O Youtube tem o poder de mudar a maneira de ver o mundo.
    Visite nosso site para mais informações.

    Youtube permitirá que você compartilhe e convide seus amigos para acompanhá-lo no mundo
    do sucesso.

    As empresas que nos propomos a aderir não cobram taxa de inscrição.

    Confie em nós.
    Confie em nossa agência.
    Youtube será para você um formidável aliado.

    O Youtube pode oferecer mais do que você pede.

    Podemos ajudá-lo a definir uma estratégia e colocar à sua disposição todas as ferramentas necessárias para
    ter sucesso no mundo do sucesso, tendo o YouTube como um aliado.

    Com o Youtube como uma rede social do seu lado você sai com uma vantagem que não está disponível para todos.

    Com a Skyweb Agency, o Youtube vai mudar sua vida …
    Junte-se a nós e convide todos os seus amigos e seus contatos do YouTube.

    Imagine por alguns momentos o potencial que
    é oferecido a você com o Youtube como um aliado.

    Youtube é agora seu aliado. Tudo que você precisa é uma
    conta no Youtube e uma rede de amigos.

    É a facilidade que é oferecida a você com o Youtube como um amigo e essa popularidade que dá a essa rede
    social.

    Você vai se alegrar seus amigos no Youtube.

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2018 さくらたんどっとびーず | powered by WordPress with Barecity