CGI python

Python WEBアプリをCGIで使う(後編:Part1)

Pythonで作業を始める前にやっておきたいのが、デフォルトのエンコードセッティング。
かならずやっておきましょう。

プログラムからやるのではなく、環境設定として行うことで文字種別に関するエラーがコレで半減する。

インストールしているpython libraryのパスにある”site-packages”配下に作成する。
通常は/usr/lib/python2.6/site-packagesがCentOSのパスです。
# vi sitecustomize.py

import sys
sys.setdefaultencoding("utf-8")

プログラムから設定するdefaultencodingの設定もあるが、呼び出しモジュール側のことも考えるとエラーに成ってしまうことも度々。だからこの設定をしておくと全体でデフォルト文字コードを設定してくれる。

それでは、必要最低限のブラウザへ表示させる簡単なコードを書いてみましょう。WEBサーバの設定は前の記事を参考にしてください。
ブラウザへ出力するには、どの言語でも共通ですがこの2行を忘れずに

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

以下のプログラムはIDとパスワードをブラウザ上へ出力する簡単なプログラムです。例えばワードプレスで会員サイトを作ろうと思った時にIDとパスワードを大量にまとめて発行したいときなど手作業でやったら大変です。ということでそのベースとなるサンプルプログラムです。
IDは何回やっても同じですが、ここはDBにあるシーケンシャルIDの最大値を求めて最終的に作り変えればよいでしょう。PDは毎回乱数で作成しMD5で暗号化していますのでWPのユーザテーブルに直接書き込んで使えば、もちろん問題なく使えます。

仕様:
クラス IdInf_gen にIDの長さとPDの長さを指定してIDとPDを得るプログラム。
コンソールで実行しても、ブラウザで実行しても動作するプログラムです。必ず最後はアクセス権を実行権限をつけましょう。

# vi disp.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import string
import random
import hashlib
import datetime

#ログイン名のダミー情報
base_code ="G"
b = 1

class  IdInf_gen(object):
    def  __init__(self,len=5,pw_len=10):
       self.__len  = len
       self.__pw_len = pw_len

    def  inst(self):
       fm = "%0" + str(self.__len) + "d"
       data = fm % b
       data = base_code + data
       pw = self.pw_gen()
       return {'id':data,'pw':pw[0],'pw_org':pw[1]}

    def  pw_gen(self):
       length = self.__pw_len
       src = string.digits + string.letters
       s=''
       for i in range(1, length):
          s += random.choice("suhvq4v87wrnqweq3b234tb2vNN")
       d = hashlib.md5(s).hexdigest()
       return [d,s]

def main():
    #第一引数がIDの長さ、第二引数がパスワードの長さ`
    p = IdInf_gen(10,15)
    print "Content-Type: text/html;charset=utf-8"
    print
    print "ID:" + p.inst()['id'] + "<br>"
    print "Crypt PD:" + p.inst()['pw'] + "<br>"
    print "ORIGIN PD:" + p.inst()['pw_org'] + "<br>"

if __name__  ==  '__main__':
    main()

# chmod 755 disp.py

コンソールで確認)
# ./disp.py

ブラウザで確認)
http://yourhost/yourpath/disp.py