ウェブサイトのプログラムにOOPを使う

CherryPyのもっとも強力な機能の一つは、ウェブサイトを「プログラム」するのに、オブジェクト指向アプローチを使うことができることです。

複雑なウェブサイトを見て、いくつかの部分において、コードがかなり共通していることがわかるでしょう。

両方の場合において、OOPはその問題にエレガントな解決方法を提供し、解決方法を実装するのに必要なたくさんのコードを少なくすむようにしてくれます。

あなたにこれがどのように実行が可能なのかを示すために、2つのバージョン: 英語バージョンとフランス語バージョンを持つウェブサイトを作ってみます。テキストとラベルの変更だけでなく、色やモジュールの表示のされ方も変更してみましょう。

ウェブサイト用に以下のコードを入力します:

#######################
CherryClass Airline abstract:
#######################
function:
    def localize(self, stri):
        return self.dictionnary.get(stri, stri)
mask:
    def header(self):
        <html><body>
            <center>
                <H1 py-eval="self.localize('Welcome to CherryPy airline')"></H1>
                <div py-if="self==airlineFrench">
                    <a py-attr="request.base+'/airlineEnglish/index'" href="">
                        Click here for English version
                    </a>
                </div><div py-else>
                    <a py-attr="request.base+'/airlineFrench/index'" href="">
                        Cliquez ici pour la version fran\xe7aise
                    </a>
                </div>
                <br><br><br><br>
    def footer(self):
            </center>
        </body></html>
    def squareWithText(self, title, text):
        <table border=0 cellspacing=0 cellpadding=1 width=200><tr>
            <td py-attr="self.borderColor" bgColor="">
                <table border=0 cellspacing=0 cellpadding=5><tr>
                    <td py-attr="self.insideColor" bgColor=""
                        align=center width=198 py-eval="'<b>%s</b><br><br>%s'%(title,text)">
                    </td>
                </tr></table>
            </td>
        </tr></table>
view:
    def bookAFlight(self):
        page=self.header()
        page+=self.squareWithText(self.localize('Booking a flight'),
            self.localize('To book a flight, think about where you want to go, and you should dream
about it tonight'))
        page+=self.footer()
        return page


#######################
CherryClass AirlineFrench(Airline):
#######################
variable:
    insideColor='#FFFF99'
    borderColor='#FF6666'
    dictionnary={
        'Welcome to CherryPy airline': 'Bienvenue chez CherryPy airline',
        'Booking a flight': 'R\xe9server un vol',
        'To book a flight, think about where you want to go, and you should dream about it tonight':
            'Pour r\xe9server un vol, pensez tr\xe8s fort \xe0 la destination, et vous devriez en r\
xeaver cette nuit'
    }
view:
    def index(self):
        page=self.header()
        page+=self.squareWithText('R\xe9server un vol', 'Pour r\xe9server un vol, cliquez sur <a hre
f="%s/bookAFlight">r\xe9server</a>'%self.getPath())+'<br>'
        page+=self.squareWithText('Pr\xe9sentation', 'CherryPy airline est la compagnie qui vous emm
\xe8ne au 7\xe8me ciel')
        page+=self.footer()
        return page

#######################
CherryClass AirlineEnglish(Airline):
#######################
variable:
    insideColor='#00CCFF'
    borderColor='#3333FF'
    dictionnary={}
view:
    def index(self):
        page=self.header()
        page+=self.squareWithText('Presentation', 'CherryPy airline is the company that will take yo
u to cloud 9')+'<br>'
        page+=self.squareWithText('Book a flight', '<a href="%s/bookAFlight">Click here</a> to book
a flight'%self.getPath())
        page+=self.footer()
        return page

#######################
CherryClass Root(AirlineEnglish):
#######################

このプログラムはCherryPyの新しい機能をたくさん使います。どのようにこれが動いているのかを理解してみましょう:

考え方としては汎用のCherryClassである(AirLine)を使うことですが、このクラスはウェブサイトの両方のバージョン(英語バージョンとフランス語バージョン)に共通するfunction, mask, viewが入っています。それから、各バージョンの特性を実装するために2つのCherryClass(AirlineFrenchAirlineEnglish)を使ったわけです。

各バージョンの特性を実装するには2つのやり方を使います:

今回の例はCherryPyの新しい機能をいくつか紹介しています:

次の章では、コードをいくつかのファイルに分離するやり方を学びます。。。



Debian User 2003-10-13