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(AirlineFrenchとAirlineEnglish)を使ったわけです。
各バージョンの特性を実装するには2つのやり方を使います:
今回の例はCherryPyの新しい機能をいくつか紹介しています:
次の章では、コードをいくつかのファイルに分離するやり方を学びます。。。