kgCx0v <a href=”http://kkxpgdgfvjkg.com/“>kkxpgdgfvjkg</a>, [url=http://avagejjbypul.com/]avagejjbypul[/url], [link=http://wvwhoqkhcjio.com/]wvwhoqkhcjio[/link], http://qcnpwntqfiyg.com/
To help answer questions about how Django works in the real world, we spoke with (well, emailed) a handful of people who have complete, deployed Django sites under their belts. Most of this appendix is in their words, which have been lightly edited for clarity.
涓轰簡鍥炵瓟 Django 鍦ㄧ幇瀹炰腑绌剁珶琛ㄧ幇濡備綍锛屾垜浠窡寰堝浜轰氦璋堣繃锛堝寘鎷 email 鏂瑰紡锛夛紝杩欎簺浜洪兘宸茬粡鍦ㄤ粬浠殑鍦扮洏涓婂畬鎴愶紝閮ㄧ讲杩 Django 绔欑偣銆傛湰闄勫綍涓昏鏄粬浠殑瑷杈烇紝褰撶劧涓轰簡琛ㄨ堪鏇存竻鏅颁篃鐣ヤ綔浜嗕竴浜涚紪杈戙
Lets meet our cast and their projects.
XaWSFu <a href=”http://acczogakanxw.com/“>acczogakanxw</a>, [url=http://bozlbsvhsrwv.com/]bozlbsvhsrwv[/url], [link=http://gbqhxgjzfqsf.com/]gbqhxgjzfqsf[/link], http://txbknegujyrf.com/
Ned Batchelder is the lead engineer at Tabblo.com. Tabblo started life as a storytelling tool built around photo sharing, but it was recently bought by Hewlett-Packard for more wide-reaching purposes:
QvtHj7 <a href=”http://sxzfqcbebnmd.com/“>sxzfqcbebnmd</a>, [url=http://caotjsvdfleu.com/]caotjsvdfleu[/url], [link=http://oscksxneivux.com/]oscksxneivux[/link], http://rjcvailnfjak.com/
HP saw real value in our style of web development, and in the way we bridged the virtual and physical worlds. They acquired us so that we could bring that technology to other sites on the Web. Tabblo.com is still a great storytelling site, but now we are also working to componentize and rehost the most interesting pieces of our technology.
鎴戜滑鐨剋eb寮鍙戦鏍硷紝浠ュ強鎴戜滑杩炴帴铏氭嫙涓栫晫涓庣墿鐞嗕笘鐣岀殑鏂瑰紡锛岃HP鐪嬪埌浜嗙湡姝g殑浠峰硷紝浠栦滑鏀惰喘浜嗘垜浠紝璁╂垜浠彲浠ュ皢鎶鏈甫缁檞eb涓婄殑鍏朵粬绔欑偣銆 Tabblo.com渚濈劧鏄竴涓紵澶х殑鏁呬簨璁茶堪绔欑偣锛屽悓鏃讹紝鎴戜滑涔熷繖浜庡皢鎴戜滑鏈鏈夎叮鐨勬妧鏈ā鍧楀寲骞舵洿鎹富鏈恒
Johannes Beigel is a lead developer at Brainbot Technologies AG. Brainbots major public-facing Django site is http://pediapress.com/, where you can order printed versions of Wikipedia articles. Johanness team is currently working on an enterprise-class knowledge-management program known as Brainfiler.
Johannes Beigel 鏄疊rainbot Technologies AG鐨勫紑鍙戜富绠★紝Brainbots 闈㈠悜鍏紬鐨勪富瑕丏jango绔欑偣鏄 http://pediapress.com/, 浣犲彲浠ヤ粠閭i噷璁㈣喘缁村熀鐧剧鐨勬墦鍗扮増銆侸ohannes鐨勫洟闃熺洰鍓嶆鑷村姏浜庝竴涓О涓築rainfiler鐨勪紒涓氱骇鐭ヨ瘑绠$悊杞欢銆
Johannes tells us that Brainfiler
Johannes 鍛婅瘔鎴戜滑锛孊rainfiler
[] is a software solution to manage, search for, categorize, and share information from distributed information sources. Its built for enterprise usage for both the intranet and the Internet and is highly scalable and customizable. The development of the core concepts and components started in 2001. Just recently we have redesigned/reimplemented the application server and Web front-end, which is [now] based on Django.
tp3sYj <a href=”http://ijlsmchjrqqb.com/“>ijlsmchjrqqb</a>, [url=http://wwolzjfopsxb.com/]wwolzjfopsxb[/url], [link=http://ehluzfideanl.com/]ehluzfideanl[/link], http://ujxvaefmdiml.com/
David Cramer is the lead developer at Curse, Inc. He develops Curse.com, a gaming site devoted to massively multiplayer online games like World of Warcraft, Ultima Online, and others.
David Cramer 鏄疌urse鐨勫紑鍙戜富绠★紝浠栧紑鍙戜簡Curse.com,涓涓嚧鍔涗簬澶у瀷澶氫汉鍦ㄧ嚎娓告垙(渚嬪榄斿吔涓栫晫锛岀綉缁滃垱涓栫邯绛)鐨勭珯鐐广
Curse.com is one of the largest deployed Django sites on the Internet:
Curse.com鏄簰鑱旂綉涓婃渶澶х殑鐢―jango寤烘垚鐨勭珯鐐逛箣涓:
We do roughly 60-90 million page views in an average month, and we have peaked at over 130 million page views [in a month] using Django. We are a very dynamic and user-centric Web site for online gamers, specifically massively multiplayer games, and are one of the largest Web sites globally for World of Warcraft. Our Web site was established in early 2005, and since late 2006 we have been expanding our reach into games beyond World of Warcraft.
鎴戜滑姣忔湀澶ф鏈夊叚鍗冧竾鍒颁節鍗冧竾鐨勯〉闈㈣闂噺锛屼娇鐢―jango锛屾垜浠〉闈㈣闂噺鐨勫嘲鍊艰揪鍒拌繃涓涓湀涓浜夸笁鍗冧竾銆傛垜浠槸楂樺害鍔ㄦ佺殑浠ョ敤鎴蜂负涓績鐨勭珯鐐癸紝鎴戜滑涓哄湪绾挎父鎴忕帺瀹舵彁渚涙湇鍔★紝鐗瑰埆鏄ぇ鍨嬪浜哄湪绾跨綉缁滄父鎴忋傛垜浠槸鍏ㄧ悆鏈澶х殑榄斿吔涓栫晫绔欑偣涔嬩竴锛屾垜浠寤轰簬2005骞达紝鍦2006骞达紝鎴戜滑鎵╁睍鍒伴瓟鍏戒笘鐣屼互澶栫殑鍏朵粬娓告垙銆
Christian Hammond is a senior engineer at VMware (a leading developer of virtualization software). Hes also the lead developer of Review Board (http://www.review-board.org/), a Web-based code review system. Review Board began life as an internal VMware project, but is now open source:
Christian Hammond VMware (铏氭嫙鍖栬蒋浠剁殑棰嗗ご缇)鐨勯珮绾у伐绋嬪笀锛屽悓鏃朵粬涔熸槸Review Board(http://www.review-board.org/)鐨勫紑鍙戜富绠★紝Review Board鏄竴涓熀浜巜eb鐨勪唬鐮佽蛋鏌ョ郴缁燂紝瀹冭捣婧愪簬VMware鐨勪竴涓唴閮ㄩ」鐩紝鐜板湪鎴愪簡涓涓紑婧愰」鐩:
In late 2006, David Trowbridge and I were discussing the process we used at VMware for handling code reviews. Before people committed code to the source repository, they were supposed to send out a diff of the change to a mailing list and get it reviewed. It was all handled over email, and as such, it became hard to keep track of reviews requiring your attention. We began to discuss potential solutions for this problem.
2006骞村簳锛孌avid Trowbridge鍜屾垜璁ㄨ浜嗗湪VMware浣跨敤鐨勪唬鐮佽蛋鏌ユ祦绋嬶紝鍦ㄥ皢浠g爜鎻愪氦鍒版簮浠g爜浠撳簱涔嬪墠锛岀▼搴忓憳瑕佸皢鏀瑰姩鐨勯儴鍒嗙敤閭欢鍙戝嚭鏉ヨ鍏朵粬浜哄闃呫傚湪杩欎釜鍩轰簬閭欢鐨勬祦绋嬩腑锛屾兂璺熻釜鏌愪釜鎰熷叴瓒g殑浠g爜璧版煡灏辨瘮杈冨洶闅俱傚洜姝わ紝鎴戜滑寮濮嬭璁鸿繖涓棶棰樼殑瑙e喅鏂规銆
Rather than writing down my ideas, I put them into code. Before long, Review Board was born. Review Board helps developers, contributors, and reviewers to keep track of the code thats out for review and to better communicate with each other. Rather than vaguely referencing some part of the code in an email, the reviewer is able to comment directly on the code. The code, along with the comments, will then appear in the review, giving the developer enough context to work with to quickly make the necessary changes.
鎴戝苟娌℃湁鎶婃兂娉曞啓鍑烘潵锛岃屾槸鐩存帴寮濮嬬紪鐮併備笉涔咃紝Review Board璇炵敓浜嗭紝瀹冨彲浠ュ府鍔╁紑鍙戜汉鍛樸佷唬鐮佸闃呰呭強鐩稿叧璐d换浜烘柟渚垮湴璺熻釜浠g爜璧版煡涓庢洿濂界殑娌熼氥備娇鐢ㄨ呭彲浠ョ洿鎺ュ湪浠g爜涓婂仛璇勬敞锛岃屼笉鏄儚鍘熸潵閭f牱鍦ㄩ偖浠朵腑鐢ㄦ枃瀛楁ā绯婄殑鎸囦唬鏌愰儴鍒嗕唬鐮併備唬鐮佷笌璇勬敞涓璧峰睍鐜板湪绯荤粺涓紝寮鍙戣呭彲浠ユ牴鎹繖浜涜瘎娉ㄦ柟渚垮湴瀵逛唬鐮佸仛鍑轰慨鏀广
Review Board grew quickly at VMware. Much faster than expected, actually. Within a few short weeks, we had ten teams using Review Board. However, this project is not internal to VMware. It was decided day one that this should be open source and be made available for any company or project to use.
鍦╒Mware锛孯eview Board鐨勮敁寤跺揩寰楄秴涔庢兂璞★紝鍦ㄧ煭鐭嚑鍛ㄥ唴锛屽凡缁忔湁鍗佹潵涓洟闃熶娇鐢ㄥ畠浜嗐傜幇鍦紝杩欎釜椤圭洰宸茬粡涓嶅啀灞闄愪簬VMware鍐呴儴浜嗭紝鎴戜滑甯屾湜鏈変竴澶╁畠鍙互璧板悜寮婧愶紝璁╂洿澶氱殑鍏徃涓庨」鐩娇鐢ㄥ畠銆
We made an open source announcement and put a site together, which is available at http://www.review-board.org/. The response to our public announcement was as impressive as our internal VMware announcement. Before long, our demo server reached over 600 users, and people began to contribute back to the project.
A0KWvQ <a href=”http://qllnukhkitqa.com/“>qllnukhkitqa</a>, [url=http://gexrhzhjvsab.com/]gexrhzhjvsab[/url], [link=http://kvpuwdrwoxgo.com/]kvpuwdrwoxgo[/link], http://rxkqpzjawlgr.com/
Review Board isnt the only code review tool on the market, but it is the first we have seen that is open source and has the extensive feature set weve worked to build into it. We hope this will in time benefit many open source and commercial projects.
wimLHQ <a href=”http://xgclqztduggh.com/“>xgclqztduggh</a>, [url=http://mpirlevloyjq.com/]mpirlevloyjq[/url], [link=http://irrgjspblhth.com/]irrgjspblhth[/link], http://bkeaotspsavm.com/
We asked each developer why he decided to use Django, what other options were considered, and how the decision to use Django was ultimately made.
鎴戜滑璇㈤棶姣忎竴涓紑鍙戜汉鍛橈紝涓轰粈楹戒粬鍐冲畾鐢―jango锛岀┒绔熸湁浠涔堝叾浠栫殑閫夋嫨鑰冭檻锛屼互鍙婂浣曟渶缁堝喅瀹氫娇鐢╠jango銆.
Ned Batchelder :
Ned Batchelder瑾:
Before I joined Tabblo, Antonio Rodriguez (Tabblos founder/CTO) did an evaluation of Rails and Django, and found that both provided a great quick-out-of-the-blocks rapid development environment. In comparing the two, he found that Django had a greater technical depth that would make it easier to build a robust, scalable site. Also, Djangos Python foundation meant that wed have all the richness of the Python ecosystem to support our work. This has definitely been proven out as weve built Tabblo.
鍦ㄦ垜鍔犲叆 Tabblo 涔嬪墠, Antonio Rodriguez (Tabblos 鐨勫垱寤鸿呬笌 CTO) 瀵 Rails 鍜 Django 鍋氫簡涓祴璇, 鍙戠幇涓よ呴兘鍙互鎻愪緵闈炲父楂樻晥鐨勫揩閫熸瀯寤虹幆澧冦傚湪涓よ呯殑瀵规瘮涓紝浠栧彂鐜帮紝Django 鏇存湁鎶鏈惈閲忥紝鍙互鏇村鏄撶殑鏋勫缓寮哄.鐨勩佸彲鎵╁睍鐨勭珯鐐广傚彟澶栵紝Python瀹屽杽鐨勭敓鎬佺郴缁熶娇寰桪jango鍏锋湁寮烘湁鍔涚殑绀惧尯鏀寔銆俆obblo鐨勫紑鍙戝厖鍒嗚瘉鏄庝簡浠ヤ笂瑙傜偣銆
Johannes Beigel :
Johannes Beigel瑾:
As we have been coding in Python for many years now, and quickly started using the Twisted framework, Nevow was the most natural solution for our Web application stuff. But we soon realized that despite the perfect Twisted integration many things were getting a little cumbersome and got in the way of our agile development process.
鎴戜滑浣跨敤Python缂栫爜宸茬粡寰堝骞翠簡锛屼笉涔呮垜浠紑濮嬩娇鐢═wisted妗嗘灦锛寃eb鏂归潰鑷劧灏变娇鐢ㄤ簡Nevow. 鐒惰屽緢蹇紝鎴戜滑鍙戠幇灏界Twisted鎻愪緵浜嗗畬缇庣殑闆嗘垚锛屽緢澶氫笢瑗胯繕鏄細鐣ユ樉绗ㄩ噸锛屽畠缁欐垜浠伒娲荤殑寮鍙戞祦绋嬮犳垚浜嗛樆纰嶃
After some Internet research it quickly became clear that Django was the most promising Web development framework for our requirements.
杩涜杩囦竴浜涘唴閮ㄨ璁轰箣鍚庯紝寰堟槑鏄撅紝Django鏄鍚堟垜浠渶姹傜殑鏈鐞嗘兂鐨剋eb妗嗘灦銆
The trigger that led us to Django was its template syntax, but we soon appreciated all the other features that are included, and so Django was pretty much a fast-selling item.
鎴戜滑杞悜Django鐨勬渶鍒濆姩鏈烘槸瀹冪殑妯℃澘璇硶锛屼絾寰堝揩鎴戜滑灏卞彂鐜癉jango涓殑鍏朵粬鐗规т篃闈炲父鏈夌敤锛孌jango涓鏃剁倷鎵嬪彲鐑
After doing a few years of parallel development and deployment (Nevow is still in use for some projects on customer sites), we came to the conclusion that Django is a lot less cumbersome, results in code that is much better to maintain, and is more fun to work with.
鍦ㄥ仛浜嗗嚑骞村苟琛屽紑鍙戜笌閮ㄧ讲宸ヤ綔鍚庯紙鍦ㄤ竴浜涘鎴风珯鐐圭殑椤圭洰涓璑evow渚濈劧鍦ㄤ娇鐢級锛屾垜浠緱鍑轰簡杩欐牱鐨勭粨璁猴細Djiango鏇磋交閲忋佹洿鐏垫椿锛屽啓鍑虹殑浠g爜鏇村鏄撶淮鎶わ紝涔熸洿鏈夎叮銆
David Cramer :
David Cramer 瑾:
I heard about Django in the summer of 2006, about the time we were getting ready to do an overhaul of Curse, and we did some research on it. We were all very impressed at what it could do, and where it could save time for us. We talked it over, decided on Django, and began writing the third revision to the Web site almost immediately.
鎴戝湪2006骞村澶╁惉璇翠簡Django锛岄偅鏃舵垜浠鍦ㄥ繖浜庝竴涓瘮杈冨ぇ鐨勯噸鏋勩傜爺绌朵簡涓涓婦jango涔嬪悗锛屽畠缁欐垜浠暀涓嬩簡寰堟繁鐨勫嵃璞★紝瀹冩彁渚涘緢澶氬姛鑳斤紝鍙互鑺傜渷鎴戜滑鐨勬椂闂达紝鎴戜滑鍟嗛噺鐫锛屽喅瀹氬氨鐢―jango銆傞┈涓婏紝鎴戜滑灏卞紑濮嬬紪鍐欑涓夌増鐨勪唬鐮佷簡銆
Christian Hammond :
Christian Hammond瑾:
I had toyed around with Django on a couple of small projects and had been very impressed with it. Its based on Python, which I had become a big fan of, and it made it easy not only to develop Web sites and Web apps, but also to keep them organized and maintainable. This was always tricky in PHP and Perl. Based on past experiences, going with Django was a no-brainer.
鎴戝湪鍑犱釜灏忕殑椤圭洰涓皾璇曚娇鐢ㄤ簡Django锛屽畠缁欐垜鐨勫嵃璞″緢娣憋紝瀹冩槸鍩轰簬Python鐨勶紝鎴戠幇鍦ㄥ凡缁忔垚浜嗕竴涓狿ython鐨勭埍濂借呫侱jango涓嶄粎浣垮緱缂栧啓缃戠珯鎴栬匴eb搴旂敤寰堝鏄擄紝鑰屼笖瀹冭繕鍙互淇濇寔浠g爜鐨勫彲缁存姢鎬э紝閫氬父杩欏湪php鎴栬卲erl涓槸姣旇緝闅惧仛鍒扮殑銆傛牴鎹繖浜涚粡楠岋紝鎴戜笉鍋囨濈储鐨勯夋嫨Django銆
Since Djangos a relatively new tool, there arent that many experienced Django developers out there. We asked our panel how they got their team up to speed on Django and for any tips they wanted to share with new Django developers.
鐢变簬Django杩樻槸涓涓瘮杈冩柊鐨勫伐鍏凤紝鏈夌粡楠岀殑Django寮鍙戣呰繕涓嶆槸澶锛岃鎴戜滑鐪嬬湅杩欎簺鍏堣鑰呬滑鏄庝箞寮濮嬩娇鐢―jango锛屼互鍙婁粬浠湁鍝簺缁忛獙鍙互鍒嗕韩缁橠jango鐨勬柊鎵嬨
Johannes Beigel :
Johannes Beigel瑾亾:
After coding mostly in C++ and Perl, we switched to Python and continued using C++ for the computationally intensive code.
鎴戜滑涓鐩村湪鍐檆++涓巔erl绋嬪簭锛屽垏鎹㈠埌python涔嬪悗锛屾垜浠緷鐒剁敤c++鏉ュ疄鐜颁竴浜涜绠楀瘑闆嗗瀷鐨勯儴鍒嗐
[We learned Django by] working through the tutorial, browsing the documentation to get an idea of whats possible (its easy to miss many features by just doing the tutorial), and trying to understand the basic concepts behind middleware, request objects, database models, template tags, custom filters, forms, authorization, localization Then [we could] take a deeper look at those topics when [we] actually needed them.
鎴戜滑鏄繖鏍峰涔燚jango鐨勶細鐓х潃鏁欑▼鍋氱粌涔狅紝闃呰鏂囨。浜嗚В瀹冮兘鑳藉仛浠涔堬紙鍙窡鐫鏁欑▼鍋氬鏄撴紡鎺夊緢澶氱壒鎬э級锛屽姫鍔涘幓鐞嗚В杩欎簺缁勪欢鑳屽悗鐨勫熀鏈蹇碉紝濡俶iddleware,request objects, database models, template tags, custom filters, forms,authorization, localization銆傚湪鐪熸闇瑕佺殑鏃跺欙紝鎴戜滑浼氬幓娣卞叆鐮旂┒杩欎簺涓婚銆
David Cramer :
David Cramer璜囧埌:
The Web site documentation is great. Stick with it.
瀹樼綉涓婄殑鏂囨。寰堜笉閿欙紝鏃跺埢鍏虫敞瀹冦
Christian Hammond :
Christian Hammond璜囧埌:
David and I both had prior experience with Django, though it was limited. We had learned a lot through our development of Review Board. I would advise new users to read through the well-written Django documentation and [the book youre reading now], both of which have been invaluable to us.
David鍜屾垜涔嬪墠瀵笵jango閮芥湁浣跨敤缁忛獙锛屽嵆浣块偅鏃惰繕鏄彈闄愮殑銆傛垜浠粠璇勮鐗堢殑寮鍙戜腑瀛﹀埌浜嗗緢澶氫笢瑗裤傛垜浼氬缓璁柊鎵嬪幓闃呰绮惧績缂栧啓鐨凞jango鏂囨。鍜屼綘姝e湪闃呰鐨勮繖鏈功锛屽畠浠浜庢垜浠兘鏄棤浠风殑銆
We didnt have to bribe Christian to get that quote promise!
鎴戜滑涓嶆槸闈炲緱鍚戝熀鐫e緬琛岃纯鏉ュ緱鍒板紩鐢ㄧ殑鏉冨姏銆
qVPiIP <a href=”http://yttqrkvgoiin.com/“>yttqrkvgoiin</a>, [url=http://kxzaeecicatj.com/]kxzaeecicatj[/url], [link=http://hmnrgnjhuqmo.com/]hmnrgnjhuqmo[/link], http://ldqzqxdbeoxc.com/
Although Review Board and Tabblo were ground-up development, the other sites were ported from existing code. We were interested in hearing how that process went.
铏界劧 Review Board 鍜 Tabblo 鏄櫧鎵嬭捣瀹跺紑鍙戣捣鏉ョ殑锛屽叾浠栫殑缃戠珯鍗存槸浠庣幇鏈変唬鐮佺Щ妞嶈屾潵銆傛垜浠劅鍏磋叮鐨勬槸浜嗚В杩欎釜绉绘鐨勮繃绋嬨
Johannes Beigel :
Johannes Beigel :
We started to port the site from Nevow, but we soon realized that wed like to change so many conceptual things (both in the UI part and in the application server part) that we started from scratch and used the former code merely as a reference.
鎴戜滑寮濮嬬殑鏃跺欎粠 Nevow 绉绘绔欑偣锛屼絾寰堝揩鎰忚瘑鍒板繀椤绘洿鏂板お澶氭蹇垫т簨鐗╋紙鍖呮嫭鍦 UI 閮ㄥ垎鍜屽簲鐢ㄦ湇鍔″櫒閮ㄥ垎锛夛紝鍥犳鎴戜滑杞屼粠闆跺紑濮嬶紝鑰屽皢涔嬪墠鐨勪唬鐮佷富瑕佺敤浣滃弬鑰冦
David Cramer :
David Cramer :
The previous site was written in PHP. Going from PHP to Python was great programmatically. The only downfall is you have to be a lot more careful with memory management [since Django processes stay around a lot longer than PHP processes (which are single cycle)].
涔嬪墠鐨勭珯鐐圭敤 PHP 缂栧啓鑰屾垚銆備粠 PHP 鍒 Python 鐨勭Щ妞嶅伐浣滈潪甯哥▼寮忓寲銆傚敮涓鐨勯棶棰樻槸浣犲繀椤婚潪甯稿皬蹇冨唴瀛樼鐞嗛棶棰樸愮敱浜 Django 杩涚▼杩愯鏃堕棿姣 PHP 杩涚▼锛堝崟寰幆锛夎闀垮緱澶氥傘
Now for the million-dollar question: How did Django treat you? We were especially interested in hearing where Django fell down its important to know where your tools are weak before you run into roadblocks.
涓嬮潰鏄竴涓叧閿棶棰橈細Django 鏄浣曞寰呬綘鐨勶紵鎴戜滑瀵瑰惉瑙 Django 鍑洪敊鐗瑰埆鎰熷叴瓒b斺斿湪鎾炲崡澧 涔嬪墠 灏辩煡閬撴墍鐢ㄥ伐鍏风殑寮辩偣鎵鍦ㄦ槸寰堥噸瑕佺殑銆
Ned Batchelder :
Ned Batchelder :
Django has really enabled us to experiment with our Web sites functionality. Both as a startup heat-seeking customers and businesses, and now as a part of HP working with a number of partners, weve had to be very nimble when it comes to adapting the software to new demands. The separation of functionality into models, views, and controllers has given us modularity so we can appropriately choose where to extend and modify. The underlying Python environment gives us the opportunity to make use of existing libraries to solve problems without reinventing the wheel. PIL, PDFlib, ZSI, JSmin, and BeautifulSoup are just a handful of the libraries weve pulled in to do some heavy lifting for us.
Django鐪熸浣挎垜浠兘澶熸弧瓒虫垜浠渶瑕佺殑缃戠粶鏋舵瀯 浣滀负鐑偣鐢ㄦ埛,浼佷笟 ,鐜板湪浣滀负hp鐨勫悎浣滀紮浼, 鎴戜滑浣跨敤闈炲父鐏垫椿鐨勬柟寮,浣胯蒋浠堕傚簲鏂扮殑闇姹. 鍒嗙鍔熻兘,妯″瀷,瑙嗗浘鍜屾帶鍒跺櫒,MVC妯″潡鍖,璁╂垜浠彲浠ユ柟渚跨殑鎵╁睍鍜岀淮鎶 鑰屽熀浜巔ython鐨勮瑷缁欎簡鐢ㄦ埛鏈轰細浣跨敤澶ч噺鐨勫凡鏈夊簱鏉ヨВ鍐 闂涓嶅繀閲嶅閫犺疆瀛 鎰熻阿 PIL, PDFlib, ZSI, JSmin,
and BeautifulSoup
The most difficult part of our Django use has been the relationship of memory objects to database objects, in a few ways. First, Djangos ORM does not ensure that two references to the same database record are the same Python object, so you can get into situations where two parts of the code are both trying to modify the same record, and one of the copies is stale. Second, the Django development model encourages you to base your data objects on database objects. Weve found over time more and more uses for data objects that are not tied to the database, and weve had to migrate away from assuming that data is stored in the database.
鍐呭瓨瀵硅薄鍜屾暟鎹簱瀵硅薄涔嬮棿鐨勫叧绯绘槸锛 in a few ways锛孌jango 鐨勪娇鐢ㄤ腑鏈闅剧殑閮ㄥ垎銆傜涓锛孌jango鐨凮RM骞朵笉鑳戒繚璇侊紝瀵瑰悓涓涓暟鎹簱璁板綍鐨勪袱姝ゅ紩鐢ㄦ槸鏉ヨ嚜鍚屼竴涓狿ython瀵硅薄锛屾墍浠ヤ綘鍙兘浼氶亣鍒拌繖绉嶆儏鍐碉細浠g爜涓殑涓や釜閮ㄥ垎瑕佷慨鏀瑰悓涓鏁版嵁搴撹褰曪紝鑰屽叾涓竴涓殑鏁版嵁鏄棫鐨勩傜浜岋紝Django 寮鍙戞ā鍨嬮紦鍔变綘鍦ㄦ暟鎹簱瀵硅薄鐨勫熀纭涓婂缓绔嬩綘鐨勬暟鎹璞°傛垜浠細鍙戠幇鏇撮绻佺殑瓒呮椂锛屾洿澶氬湴浣跨敤閭d簺娌℃湁瀵瑰簲鍒版暟鎹簱鐨勬暟鎹璞★紝鎴戜滑鍙ソ涓嶅啀鍋囧畾鏁版嵁鏄繚瀛樺湪鏁版嵁搴撻噷鐨勩
For a large, long-lived code base, it definitely makes sense to spend time up front anticipating the ways your data will be stored and accessed, and building some infrastructure to support those ways.
瀵逛簬涓涓湁澶ч噺鐨勩佺敓鍛藉懆鏈熷緢闀跨殑浠g爜搴擄紝鑺辨椂闂存潵anticipating浣犵殑鏁版嵁瀛樺偍鍜岃闂槸鏈夐潪甯告剰涔夌殑銆俷d building some infrastructure to support those ways.
Weve also added our own database migration facility so that developers dont have to apply SQL patches to keep their database schemas current. Developers who change the schema write a Python function to update the database, and these are applied automatically when the server is started.
鎴戜滑涔熷鍔犱簡鏁版嵁搴撹縼绉诲姛鑳斤紝杩欐牱寮鍙戜汉鍛樺氨涓嶅繀閫氳繃SQL鑴氭湰鏉ユ洿鏂版暟鎹簱缁撴瀯銆傚紑鍙戜汉鍛樺彲浠ラ氳繃鍐欎竴涓猵ython鍑芥暟鐨勬潵鏇存柊鏁版嵁搴撱傚綋鏈嶅姟鍣ㄩ噸鍚殑鏃跺欙紝杩欎釜鏇存柊浼氳嚜鍔ㄧ敓鏁堛
Johannes Beigel :
Johannes Beigel璜囧埌:
We consider Django as a very successful platform that perfectly fits in the Pythonic way of thinking. Almost everything just worked as intended.
鎴戜滑鎶奃jango鐪嬪仛鏄竴涓畬缇庣鍚圥ythonic鎬濇兂鐨勬垚鍔熷钩鍙般傛墍鏈変簨鎯呴兘浼氬儚鎮ㄦ湡鏈涚殑閭f牱宸ヤ綔銆
One thing that needed a bit of work in our current project was tweaking the global settings.py file and directory structure/configuration (for apps, templates, locale data, etc.), because we implemented a highly modular and configurable system, where all Django views are actually methods of some class instances. But with the omnipotence of dynamic Python code, that was still possible.
鍦ㄦ垜浠殑椤圭洰涓竴涓渶瑕佽姳鐐规椂闂存潵鍋氱殑浜嬫儏鏄皟鑺傚叏灞 settings.py鏂囦欢鍜岀洰褰曟垨閰嶇疆锛堜负apps绋嬪簭,templates妯℃澘,locale data鏈湴鍖栬缃,鎴栬呭叾浠栫殑鏂囦欢銆傦級鍥犱负鎴戜滑鍦ㄩ儴缃蹭竴涓珮搴︽ā鍧楀寲鍜屽彲閰嶇疆绯荤粺锛岄」鐩腑鎵鏈塂jango瑙嗗浘鏄被瀹炰緥鍖栫殑鏂规硶 But with the omnipotence of dynamic Python code, that was still possible.
David Cramer :
aUTmui <a href=”http://kygcxffhbqdp.com/“>kygcxffhbqdp</a>, [url=http://qphaudolykxk.com/]qphaudolykxk[/url], [link=http://xwbahlmcsnmk.com/]xwbahlmcsnmk[/link], http://zkapcuytecti.com/
We managed to push out large database applications in a weekend. This would have taken one to two weeks to do on the previous Web site, in PHP. Django has shined exactly where we wanted it to.
涓涓懆鏈紝鎴戜滑琚姹傛悶鍑轰竴涓ぇ鍨嬫暟鎹簱搴旂敤绋嬪簭銆傚鏋滅敤php鐨勮瘽锛屽仛鍑鸿繖鏍蜂竴涓師鍨嬬綉绔欐垜浠ぇ姒傝鑺变竴鍒颁袱鍛ㄦ椂闂淬傝繖鏃跺欐垜浠彂鐜颁簡Django
Now, while Django is a great platform, it cant go without saying that its not built specific to everyones needs. Upon the initial launch of the Django Web site, we had our highest traffic month of the year, and we werent able to keep up. Over the next few months we tweaked bits and pieces, mostly hardware and the software serving Django requests. [This included modification of our] hardware configuration, optimization of Django, [and tuning] the software we were using to serve the requests (which, at the time, was lighttpd and FastCGI).
x1JL2r <a href=”http://bjzzhfulbyfy.com/“>bjzzhfulbyfy</a>, [url=http://kljpyuunfsar.com/]kljpyuunfsar[/url], [link=http://vptdhtnlmjvp.com/]vptdhtnlmjvp[/link], http://xxxsdfebyikd.com/
In May of 2007, Blizzard (the creators of World of Warcraft) released another quite large patch, as they had done in December when we first launched Django. The first thing going through our heads was, Hey, we nearly held up in December, this is nowhere near as big, we should be fine. We lasted about 12 hours before the servers started to feel the heat. The question was raised again: was Django really the best solution for what we want to accomplish?
鍦2007骞5鏈堜唤锛屾毚闆紙榄斿吔涓栫晫鐨勫垱閫犲叕鍙革級閲婂嚭浜嗗彟澶栦竴涓瘮杈冨ぇ鐨勮ˉ涓併傚氨鍍忔垜浠垰鍚姩Django椤圭洰鐨11鏈堜唤鏃跺欎粬浠仛鐨勪竴鏍枫傜涓浠堕棯杩囨垜浠剳娴风殑浜嬫儏鏄紝鎴戜滑鍦11鏈堜唤鐨勬椂鍊欏樊鐐规病褰撴満銆傝繖娆″拰涓婃宸笉澶氾紝鎴戜滑鐨勭綉绔欏簲璇ヨ兘椤朵綇鍘嬪姏銆傚ぇ姒12涓皬鏃朵互鍚庢垜浠墠鍙戠幇鏈嶅姟鍣ㄥ紑濮嬪彈鍒板奖鍝嶃傞棶棰樺啀娆¤鎻愬嚭锛欴jango鏄笉鏄垜浠綉绔欐渶濂界殑瑙e喅鏂规锛
Thanks to a lot of great support from the community, and a late night, we managed to implement several hot-fixes to the Web site during those few days. The changes (which hopefully have been rolled back into Django by the time this book is released) managed to completely reassure everyone that while not everyone needs to be able to do 300 Web requests per second, the people who do, can, with Django.
鎰熻阿鏉ヨ嚜绀惧尯鐨勫緢澶氬己澶х殑鏀寔锛屽湪鍑犲ぉ鍚庣殑涓涓繁澶滐紝鎴戜滑涓虹綉绔欓儴缃蹭簡涓浜涗慨澶嶈ˉ涓併俆he changes (which hopefully have been rolled back into Django by the time this book is released) managed to completely reassure everyone that while not everyone needs to be able to do 300 Web requests per second, the people who do, can, with Django.
Christian Hammond :
Christian Hammond鎻愬強:
Django allowed us to build Review Board fairly quickly by forcing us to stay organized through its URL, view, and template separations, and by providing useful built-in components, such as the authentication app, built-in caching, and the database abstraction. Most of this has worked really well for us.
Django鍏佽ū鎴戝戦潪甯稿揩閫熷湴寤洪犱竴鍊嬪京缈掔増锛屼甫椹呬娇鎴戝戣兘閫忛亷URL锛孷IEW锛屽拰妯f澘缍寔钁楁鐞嗭紝鏈夋灦妲嬬殑锛岄潬钁楁墍鎻愪緵鐨勫収寤哄厓绱狅紝濡傛瑠闄愮鐞嗗皬绋嬪紡锛屽収寤虹殑蹇彇锛屽拰璩囨枡搴殑绨″寲銆傞欎簺鍔熻兘锛岀禃澶ч儴鍒嗛兘璁撴垜鍊戦亱琛岀殑寰堟湁鏁堢巼銆
Being a dynamic [Web application], weve had to write a lot of JavaScript code. This is an area that Django hasnt really helped us with so far. Djangos templates, template tags, filters, and forms support are great, but arent easily usable from JavaScript code. There are times when we would want to use a particular template or filter but had no way of using it from JavaScript. I would personally like to see some creative solutions for this incorporated into Django.
鍋氱偤涓鍊嬪嫊鎱媅缍茬珯鎳夌敤绋嬪紡]锛屾垜鍊戝繀闋堝涓鍫咼avaScript 浠g⒓銆傞欐槸鍊婦jango 娌掓硶瀵﹂殯涓婂公鎴戝戝緢澶氬繖鐨勯儴鍒嗐侱jango 鐨勬ǎ鏉匡紝妯f澘鐨勬绫わ紝閬庢烤鍣紝琛ㄥ柈鐨勬敮鎸侀兘鏄秴妫掔殑锛屼絾鏄矑鏈夎睛娉曠啊鍖朖avaScript 浠g⒓銆傜暥鎴戝戞兂瑕佷娇鐢ㄤ竴鍊嬬壒鍒ョ殑妯f澘鎴栨槸閬庢烤鍣ㄧ殑鏅傚欙紝鍋忓亸娌掓硶鍚屾檪浣跨敤JavaScript 浠g⒓銆傛垜鍊嬩汉灏囨渻妯傛柤鐪嬭涓浜涙湁鍓垫剰鐨勮В娉曞皣閫欓儴鍒嗗惈鍏avaScript 浠g⒓銆
Often successful projects are made so by their teams, not their choice of technology. We asked our panel how their teams work, and what tools and techniques they use to stay on track.
甯稿父锛屾垚鍔熺殑灏堟涓昏鏄洜鐐轰粬鍊戠殑鍦橀殜锛岄兘涓嶆槸浠栧戞墍閬哥殑鎶琛擄紝鎴戝戣鍟忔垜鍊戠殑panel浠栧戠殑鍦橀殜鏄浣曢亱鍋氾紝浠栧戞槸鐢ㄤ粈楹煎伐鍏峰拰鎶琛撲締璁撳伐浣滀笂杌岄亾銆
Ned Batchelder :
Ned Batchelder瑾:
Were a pretty standard Web startup environment: Trac/SVN, five developers. We have a staging server, a production server, an ad hoc deploy script, and so on.
涓鍊嬮潪甯告婧栫殑缍查爜闁嬪壍鐠板:Trac/SVN,鑹ソ鐨勭▼寮忓摗銆傛垜鍊戞湁涓鍊嬫脯寮忎富姗燂紝涓鍊嬬敘鍝佷富姗燂紝涓鍊媋d hoc鐧煎竷鎸囦护绋裤傚氨閫欎簺銆
Memcached rocks.
瑷樻喍楂斿揩鍙栧緢閲嶈銆
Johannes Beigel :
Johannes Beigel瑾:
We use Trac as our bug tracker and wiki and have recently switched from using Subversion+SVK to Mercurial (a Python-written distributed version- control system that handles branching/merging like a charm).
4xN98q <a href=”http://mmrbbdtenyls.com/“>mmrbbdtenyls</a>, [url=http://tleojmxpihwy.com/]tleojmxpihwy[/url], [link=http://qxzzgnendedi.com/]qxzzgnendedi[/link], http://yywfxzygtdtk.com/
I think we have a very agile development process, but we do not follow a rigid methodology like Extreme Programming ([though] we borrow many ideas from it). We are more like Pragmatic Programmers.
鎴戞兂鎴戝戞湁涓鍊嬮潪甯告晱鎹风殑闁嬬櫦閬庣▼锛屼絾鏄垜鍊戞矑鏈夐伒瀹堝毚鏍肩殑鏂规硶璜栧儚妤甸檺绶ㄧ▼瀵殑(鍗充娇鎴戝戝熺敤浜嗗緢澶氶粸瀛愬緸閭h)銆傛垜鍊戞瘮杓冨儚鏄疨ragmatic绋嬪紡鍝°
We have an automated build system (customized but based on SCons) and unit tests for almost everything.
鎴戜滑鏈変竴涓嚜鍔ㄧ紪璇戠郴缁燂紙鍩轰簬瀹氬埗杩囩殑SCons锛夊拰瀵瑰嚑涔庢墍鏈変笢瑗跨殑鍗曞厓娴嬭瘯銆
David Cramer :
David Cramer璜栧強:
Our team consists of four Web developers, all working in the same office space, so its quite easy to communicate. We rely on common tools such as SVN and Trac.
鎴戜滑鐨勫洟闃熸湁4涓獁eb寮鍙戜汉鍛樻瀯鎴愶紝杩4涓汉閮藉湪鍚屼竴涓姙鍏宸ヤ綔锛屾墍浠ユ垜浠郊姝ゆ矡閫氫氦娴佹槸寰堟柟渚垮拰瀹规槗鐨勩傛垜浠郊姝ゅ叡鍚屼娇鐢ㄤ竴浜涘伐鍏凤紝濡傦細SVN鍜孴rac.
Christian Hammond :
Christian Hammond杩伴亾:
Review Board currently has two main developers (myself and David Trowbridge) and a couple of contributors. Were hosted on Google Code and make use of their Subversion repository, issue tracker, and wiki. We actually use Review Board to review our changes before they go in. We test on our local computers, both by hand and through unit tests. Our users at VMware who use Review Board every day provide a lot of useful feedback and bug reports, which we try to incorporate into the program.
寰╃繏鏉垮闅涗笂鏈夊叐鍊嬩富瑕侀枊鐧艰(鎴戝拰David Trowbridge)鍜屼竴鍫嗚并鐛昏呫傛垜鍊戝皣绔欓粸鏀惧湪Google Code 鍒╃敤浠栧戠殑Subversion婧愮⒓鍊夊韩锛屼簨浠惰拷韫ゅ櫒锛屽拰缍熀銆傛垜鍊戝闅涗笂浣跨敤寰╃繏鐗堟槸瑕佸京缈掓垜鍊戠殑鏀硅畩銆傛垜鍊戝厛鍦ㄨ嚜宸辩殑鏈湴涓绘娓│锛屼篃鏈夋墜鍕曞拰鍠厓娓│銆傛垜鍊戠殑浣跨敤鑰呭湪VMware涓婃瘡澶╃敤Review Board鎻愪緵涓鍫嗘湁鐢ㄧ殑鍥為鍜岃嚟锜插牨鍛婏紝璁撴垜鍊戝彲浠ヨ│钁楅欎簺鎴愭灉鏁村悎閫蹭締銆
jOEx6u <a href=”http://wdvyaxaohnin.com/“>wdvyaxaohnin</a>, [url=http://scjqbwipafoe.com/]scjqbwipafoe[/url], [link=http://hizygvuirqpt.com/]hizygvuirqpt[/link], http://mgqxipizszyi.com/
The Django developers take ease of deployment and scaling very seriously, so were always interested in hearing about real-world trials and tribulations.
Django鐨勫紑鍙戣呭緢涓ヨ們璁ょ湡鐨勫寰呭浣曠畝鍖栭儴缃插強绯荤粺鐨勬墿灞(scaling)锛屽洜姝ゆ垜浠噸瑙嗗緢涔愭剰鐨勫惉鍒扮幇瀹炴儏鍐甸噷鏈夊叧绯荤粺閮ㄧ讲鍜屾嫇灞曪紙scaling锛夌殑涓浜涜浣犻夯鐑﹀拰寰堥毦澶勭悊鐨勯棶棰樸
Ned Batchelder :
Ned Batchelder鎻愬強:
Weve used caching both at the query and response layers to speed response time. We have a classic configuration: a multiplexer, many app servers, one database server. This has worked well for us, because we can use caching at the app server to avoid database access, and then add app servers as needed to handle the volume.
鎴戝戝凡缍撲娇鐢ㄥ揩鍙栧湪鏌ヨ鍜屽洖鎳夊堡锛岃棄姝や締鍔犲揩鍥炴噳鏅傞枔銆傛垜鍊戞湁涓鍊嬪彜鍏哥殑瑷畾绲勬厠鏂瑰紡:涓鍊嬪閲嶇殑涓绘锛屽緢澶氬嬫噳鐢ㄤ己鏈嶅櫒锛屼竴鍊嬭硣鏂欏韩涓绘銆傜洰鍓嶉欑ó鏋舵閬嬩綔鑹ソ锛屽洜鐐烘垜鍊戝彲浠ヤ娇鐢ㄥ揩鍙栧湪鎳夌敤浼烘湇鍣ㄤ締閬垮厤璩囨枡搴瓨鍙栵紝鐒跺緦鍔犱笂鎳夌敤浼烘湇鍣紝灏遍渶姹備笂渚嗘噳浠樻祦閲
Johannes Beigel :
Johannes Beigel瑷鍙:
Linux servers, preferably Debian, with many gigs of RAM. Lighttpd as the Web server, Pound as the HTTPS front-end and load balancer if needed, and Memcached for caching. SQLite for small databases, Postgres if data grows larger, and highly specialized custom database stuff for our search and knowledge management components.
Linux涓绘锛屽挨鍏舵槸鍋忓ソDebian,鎼級寰堝鐨(gigs)瑷樻喍锛孡ighttpd鐣朵綔缍茬珯浼烘湇鍣紝Pound 鐣朵綔HTTPS 鍓嶇鍜岃矤杓夊钩琛″櫒锛屽亣濡傞渶瑕佺殑瑭憋紝鑰孧emcached鐣跺仛蹇彇銆係QLite 鐢ㄥ仛灏忓瀷鐨勮硣鏂欏韩锛屽亣濡傝硣鏂欓噺鎴愰暦澶揩灏辩敤 Postgres 锛岄珮搴︾殑瑕忔牸鍖栧瑁借硣鏂欏韩鏄垜鍊戠殑灏嬫壘鍜岀煡璀樼鐞嗙殑鍏冧欢銆
David Cramer :
David Cramer鎻愬強:
Our structure is still up for debate [but this is whats current]:
鎴戜滑鐨勭粨鏋勮繕鏈夊緟璁ㄨ锛屼絾鐩墠灏辨槸杩欎釜鏍峰瓙鐨勩
When a user requests the site they are sent to a cluster of Squid servers using lighttpd. There, servers then check if the user is logged in. If not, theyre served a cached page. A logged-in user is forwarded to a cluster of Web servers running apache2 plus mod_python (each with a large amount of memory), which then each rely on a distributed Memcached system and a beastly MySQL database server. Static content is hosted on a cluster of lighttpd servers. Media, such as large files and videos, are hosted (currently) on a server using a minimal Django install using lighttpd plus fastcgi. As of right now were moving toward pushing all media to a service similar to Amazons S3.
鐣朵竴鍊嬩娇鐢ㄨ呰姹傞欏嬬恫绔欙紝瀹冨戞渻琚偝閫佸埌Squid (浣跨敤lighttpd)鐨勫彚闆嗕富姗熴傚湪閭h锛屼富姗熸渻妾㈡煡鏄惁浣跨敤宸茬稉鐧诲叆銆傚亣濡備笉鏄紝浠栧戞渻鎷涘緟涓鍊嬪揩鍙栭爜闈€備竴鍊嬪凡鐧诲叆鐨勪娇鐢ㄨ呮渻琚紩灏庡埌涓鍊嬬恫绔欎富姗(璺戣憲lighttpd鍔犱笂mod_python(姣忎竴鍊嬮兘鎿佹湁澶ч噺鐨勮鎲堕珨))妲嬫垚鐨勫彚闆嗭紝渚濋潬鑰呭垎鏁e紡鐨凪emcached绯荤当鍜岃秴寮风殑MySQL 璩囨枡搴富姗熴傞潨鎱嬬殑鍏у鏄瓨鏀惧湪鐢眑ighttpd 绲勬垚鐨勫彚闆嗐傚濯掗珨锛屽澶х殑褰遍煶妾旓紝閫氬父鏄斁鍦ㄧ敤瓒呭皬鐨凞jango 鍔犱笂lighttpd 鍜 fastcgi銆傜従鍦ㄩ欎簺閮界Щ寰锛屾帹鍚戞墍鏈夊鏌愰珨鍒颁竴鍊嬫湇鍕欙紝椤炰技Amazons S3銆
Christian Hammond :
Christian Hammond
There are two main production servers right now. One is at VMware and consists of an Ubuntu virtual machine running on VMware ESX. We use MySQL for the database, Memcached for our caching back-end, and currently Apache for the Web server. We have several powerful servers that we can scale across when we need to. We may find ourselves moving MySQL or Memcached to another virtual machine as our user base increases.
xDo9EU <a href=”http://yqzawizakcxu.com/“>yqzawizakcxu</a>, [url=http://molcupchkzfm.com/]molcupchkzfm[/url], [link=http://uzvrovlrupbl.com/]uzvrovlrupbl[/link], http://xitnlxuevnvb.com/
The second production server is the one for Review Board itself. The setup is nearly identical to the one at VMware, except the virtual machine is being hosted on VMware Server.
绗簩涓敓浜ф湇鍔″櫒灏辨槸鐢ㄤ簬Review Board鐨勯偅涓傚畠鐨勮缃拰铏氭嫙鏈洪噷闈㈢殑閭d釜鏄畬鍏ㄤ竴鏍风殑锛屽敮涓宸埆灏辨槸铏氭嫙鏈烘槸杩愯鍦╒Mware鏈嶅姟鍣ㄤ笂鐨勩
鍏充簬鏈瘎娉ㄧ郴缁
鏈珯浣跨敤涓婁笅鏂囧叧鑱旂殑璇勬敞绯荤粺鏉ユ敹闆嗗弽棣堜俊鎭備笉鍚屼簬涓鑸鏁寸珷鍋氳瘎娉ㄧ殑鍋氭硶锛 鎴戜滑鍏佽浣犲姣忎竴涓嫭绔嬬殑鈥滄枃鏈潡鈥濆仛璇勬敞銆備竴涓滄枃鏈潡鈥濈湅璧锋潵鏄繖鏍风殑锛
涓涓滄枃鏈潡鈥濇槸涓涓钀斤紝涓涓垪琛ㄩ」锛屼竴娈典唬鐮侊紝鎴栬呭叾浠栦竴灏忔鍐呭銆 浣犻変腑瀹冧細楂樹寒搴︽樉绀:
瑕佸鏂囨湰鍧楀仛璇勬敞锛屼綘鍙渶瑕佺偣鍑诲畠鏃佽竟鐨勬爣璇嗗潡:
鎴戜滑浼氫粩缁嗛槄璇绘瘡涓瘎璁猴紝濡傛灉鍙兘鐨勮瘽鎴戜滑涔熶細鎶婅瘎娉ㄨ冭檻鍒版湭鏉ョ殑鐗堟湰涓幓:
濡傛灉浣犳効鎰忎綘鐨勮瘎娉ㄨ閲囩敤锛岃纭繚鐣欎笅浣犵殑鍏ㄥ悕 (娉ㄦ剰涓嶆槸鏄电О鎴栫畝绉帮級
Many, many thanks to Jack Slocum; the inspiration and much of the code for the comment system comes from Jack's blog, and this site couldn't have been built without his wonderful
YAHOO.ext
library. Thanks also to Yahoo for YUI itself.