<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Read Sean

    Read me, read Sean.
    posts - 508, comments - 655, trackbacks - 9, articles - 4


    一篇關(guān)于目前開發(fā)中的KDE 4.1最新進(jìn)展介紹
    http://polishlinux.org/kde/kde-41-visual-changelog-rev-783000/

    看上去挺不錯(cuò)的,有了KDE 4的基礎(chǔ),從4.1開始,一些之前來不及polish的地方開始逐漸被彌補(bǔ)。


    posted @ 2008-03-12 00:27 laogao 閱讀(672) | 評(píng)論 (0)編輯 收藏


    最近嘗試把一個(gè)Oracle數(shù)據(jù)庫,連同構(gòu)建在這個(gè)數(shù)據(jù)庫上的Java應(yīng)用移植到PostgreSQL環(huán)境。在移植過程中,總結(jié)了一些要點(diǎn),一方面作為筆記備忘,一方面也給有類似任務(wù)需要處理而又無從下手的朋友作為參考。

    1- 首先是準(zhǔn)備PostgreSQL環(huán)境。有條件的話,最好是找一臺(tái)空閑的PC機(jī)作為測試服務(wù)器,安裝Linux或BSD,然后從源碼編譯最新的PostgreSQL 8.3.0。編譯時(shí),通過configure指定--with-perl和--with-python以支持PL/Perl和PL/Python。因?yàn)榻^大多數(shù)Linux發(fā)行版都已自帶Perl和Python,不必額外安裝。

    2- 如果是Windows環(huán)境,又需要Perl和Python,則必須額外安裝,Python的話,可以方便的找到2.5 for Windows的安裝包,Perl的話,推薦ActivePerl,相對(duì)麻煩一點(diǎn),為了后面用到的一些便利的功能順利加載,Perl版本盡量選5.8.8。

    3- 創(chuàng)建數(shù)據(jù)庫和用戶。通過initdb初始化數(shù)據(jù)目錄,配置postgresql.conf指定主機(jī)IP、端口等等信息,配置pg_hba.conf指定訪問權(quán)限,通過pg_ctl -D <數(shù)據(jù)目錄> -l <日志文件> start啟動(dòng)postmaster,然后createdb、createuser創(chuàng)建數(shù)據(jù)庫和用戶。數(shù)據(jù)庫建好之后,就可以createlang -d <數(shù)據(jù)庫名> [plperl|plperlu|plpython|plpythonu]開啟PL/Perl和PL/Python。具體命令行參數(shù)可通過各命令加--help查看。

    4- 安裝PostgreSQL客戶端pgAdminIII,最新版是1.8.2,有條件的話,也可以下載源碼自己編譯。

    5- 安裝Oracle客戶端,需要在PostgreSQL同一臺(tái)機(jī)器,以便Perl用于連接數(shù)據(jù)庫的DBI和Oracle驅(qū)動(dòng)DBD::Oracle模塊順利安裝。如果是Windows上的ActivePerl,則可以通過ppm install DBD-Oracle,如果是Linux/BSD,則可以通過CPAN來安裝,如perl -MCPAN -e shell進(jìn)入CPAN Shell,通過install <模塊名>或force install <模塊名>安裝DBI和DBD::Oracle。

    6- 數(shù)據(jù)庫的移植,可以選擇ora2pg來幫忙,目前的版本是4.7。ora2pg是一個(gè)用于讀取Oracle數(shù)據(jù)庫schema、數(shù)據(jù),并生成PostgreSQL腳本或直接導(dǎo)入PostgreSQL數(shù)據(jù)庫的Perl工具。用法很簡單,就是通過.conf文件指定數(shù)據(jù)庫連接信息包括NLS_LANG、需要導(dǎo)出導(dǎo)入的schema、table、view、data等等,然后執(zhí)行一個(gè)pl腳本。這是目前相對(duì)比較成熟的一個(gè)方案,但是遇到schema復(fù)雜、約束較強(qiáng)的數(shù)據(jù)庫,需要手工處理的地方還是不少。建議不要直接寫入PostgreSQL,而是生成SQL腳本,驗(yàn)證無誤后再執(zhí)行。ora2pg默認(rèn)會(huì)把Oracle中名稱的大寫轉(zhuǎn)換成小寫,因?yàn)镻ostgreSQL在解析SQL時(shí),除非""括起來,默認(rèn)都是轉(zhuǎn)成小寫。schema、table、view、sequence、data等等,基本用ora2pg,加上一些手工調(diào)整即可搞定。至于function、stored procedure等,還是手工移吧,偷不得懶。除了ora2pg,其實(shí)也可以配置DBI-Link,將Oracle數(shù)據(jù)庫掛到PostgreSQL數(shù)據(jù)庫作為一組獨(dú)立的"schema",然后用create table xxx as select ... from ...這樣的語法來倒表和數(shù)據(jù)。PostgreSQL的contrib包也附帶有一個(gè)dblink,不過是連接其他PostgreSQL數(shù)據(jù)庫的,如果需要連接非PostgreSQL, 還是考慮DBI-Link,任何可以通過Perl的DBI接口訪問的數(shù)據(jù)庫,都能link進(jìn)PostgreSQL。

    7- 接下來就是Java應(yīng)用本身了,我這次移的這個(gè)應(yīng)用是Spring+iBatis架構(gòu)的,很多SQL語句都是明文,好在DAO層的基礎(chǔ)部分(CRUD)的SQLMap是工具自動(dòng)生成,且都是符合ANSI SQL92標(biāo)準(zhǔn)的,不需要修改即可使用。其余的高級(jí)查詢SQL,需要調(diào)整的地方不少,一些常見的修改列舉如下:

    i. SELECT出來的column(包括子查詢),如果有別名,必須加AS,比如 select null as some_column from some_table;
    ii. PostgreSQL沒有dual表,類似select 0 from dual的語句,寫成select 0即可;
    iii. DECODE函數(shù)需要重構(gòu)成(case when some_column = 'some_value' then 'some_other_value' when ... then ... else 'some_default_value' end ) as some_column;
    iv. NVL()函數(shù),PostgreSQL中相對(duì)應(yīng)的是coalesce(),其實(shí)幾乎所有主流DBMS都支持coalesce,包括Oracle,這才是標(biāo)準(zhǔn)寫法;
    v. 比較日期,在PostgreSQL中,建議使用date_trunc('day', SOME_DATE) = date_trunc('day', #enteredDate#)這樣的寫法,其中'day'位置可選字段包括有year、month、week、hour、minute、second等等;
    vi. SYSDATE,對(duì)應(yīng)到PostgreSQL是current_timestamp,可以根據(jù)需要使用current_date;
    vii. ROWNUM,通常我們用ROWNUM都是為了限制查詢出來的記錄數(shù),PostgreSQL沒有這個(gè)關(guān)鍵字,需要改成在SELECT語句最后添加 LIMIT語句,如LIMIT 100;
    viii. (+)這樣的外連接寫法需要調(diào)整為SQL標(biāo)準(zhǔn)的 table1 [LEFT|RIGHT|FULL] OUTER JOIN table2 ON (...);
    ix. CONNECT BY ... START WITH ... 遞歸查詢可以參考 http: //www.postgresql.org/docs/8.3/static/tablefunc.html 的connectby()函數(shù).

    最后再多提一點(diǎn),PostgreSQL自帶的過程語言是PL/pgSQL,在PostgreSQL上寫function,除了用plpqsql,還支持sql、plperl(u)、plpython(u)等等。如果你對(duì)SQL天生過敏,看類似PL/pgSQL的代碼都很吃力,別說是寫了,你完全可以用你喜歡的語言來表達(dá)函數(shù)和存儲(chǔ)過程的邏輯。有了PL/Python,你還怕什么呢?你幾乎能做任何事。

    [更新 20080313] 把JDBC驅(qū)動(dòng)的部分漏掉了,移植Java應(yīng)用時(shí),除了改SQL,還需要拿PostgreSQL的JDBC驅(qū)動(dòng)放到classpath下面,如WEB-INF/lib,然后修改數(shù)據(jù)庫連接URL,改成jdbc:postgresql://<ip>:<port>/<dbname>即可。

    [更新 20080323] 移植schema和數(shù)據(jù)時(shí),比ora2pg更方便的一種方式是利用EnterpriseDB的Migration Tool,將Oracle的JDBC驅(qū)動(dòng)ojdbc14.jar拷貝到EnterpriseDB安裝路徑下的jre/lib/ext下后,啟動(dòng)Developer Studio即可建立Oracle連接,選中schema后,可以通過右鍵Online Migration將schema、數(shù)據(jù)、函數(shù)包等等一次性通通導(dǎo)入EnterpriseDB。如果要繼續(xù)往"純"PostgreSQL移,從EDB做backup,然后到PostgreSQL下做restore,這樣會(huì)丟掉函數(shù)包,因?yàn)楫吘笶DB在PostgreSQL基礎(chǔ)上做了相當(dāng)改造以和Oracle兼容,不過函數(shù)包之類還是手工移比較穩(wěn)妥。


    posted @ 2008-03-11 23:04 laogao 閱讀(2808) | 評(píng)論 (0)編輯 收藏


    啥也不說了,開心!


    posted @ 2008-03-05 05:39 laogao 閱讀(649) | 評(píng)論 (0)編輯 收藏


    在JRuby得到Sun的認(rèn)可并成功發(fā)布1.0,已經(jīng)向1.1邁進(jìn)之時(shí),比Ruby應(yīng)用更廣、更早出現(xiàn)JVM運(yùn)行版本的Python也終于得到了Sun的重視:

    http://www.eweek.com/c/a/Application-Development/Sun-Hires-Python-Experts/

    盡管Sun官方的說法是他們會(huì)更多的應(yīng)用和扶持native版的Python,相信一直飽受冷落的Jython,也多少會(huì)從中受益吧。


    posted @ 2008-03-05 00:07 laogao 閱讀(470) | 評(píng)論 (0)編輯 收藏


    就在2月的最后一天,Apache Harmony發(fā)布了5.0的第5個(gè)milestone: http://harmony.apache.org/

    為默默耕耘的人鼓掌。


    posted @ 2008-02-29 23:28 laogao 閱讀(428) | 評(píng)論 (0)編輯 收藏


    本賽季狀態(tài)漸佳,外號(hào)"禁區(qū)之狐"的阿森納小將Eduardo在英超客場對(duì)陣Birmingham City中慘遭暗害:

    (由于實(shí)在太過血腥,不忍心放在首頁,請(qǐng)點(diǎn)擊查看)

    在此強(qiáng)烈譴責(zé)Martin Taylor這次不負(fù)責(zé)任的野蠻鏟球,只給你紅牌實(shí)在太輕了。讓我們共同為Eduardo祈禱,祝愿他早日康復(fù)!也希望綠茵場上不要再發(fā)生類似的慘劇。足球應(yīng)該是給人帶來快樂的,不是人身傷害。


    posted @ 2008-02-24 13:22 laogao 閱讀(650) | 評(píng)論 (0)編輯 收藏


    春節(jié)期間真是好事不斷啊,繼PostgreSQL 8.3正式release后,Grails也如約發(fā)布1.0版。作為受到Ruby on Rails啟發(fā)開動(dòng)的"Groovy版Rails"項(xiàng)目,它在設(shè)計(jì)哲學(xué)上和Rails,包括JRuby版的Rails,有著很大的不同,Rails是從頭開始用Ruby完整實(shí)現(xiàn)從表現(xiàn)層到ORM所有功能,而Grails則是利用Java社區(qū)現(xiàn)有的成熟開源框架,如Spring、Hibernate等,在此基礎(chǔ)上整合出一套完整的Web應(yīng)用框架,有點(diǎn)類似Pylons和Django的區(qū)別。

    之前一篇隨筆也提到過,和其它在JVM中運(yùn)行的動(dòng)態(tài)語言如Jython、JRuby不同的是,Groovy對(duì)于有Java基礎(chǔ)的人們來說,學(xué)習(xí)曲線幾乎是平的,上手很快,如果你同時(shí)也熟悉Spring和Hibernate等,那么Grails更是不二之選。

    官網(wǎng): http://grails.codehaus.org/
    Release Notes: http://grails.org/1.0+Release+Notes
    下載: http://grails.codehaus.org/Download


    posted @ 2008-02-07 10:47 laogao 閱讀(746) | 評(píng)論 (1)編輯 收藏


    經(jīng)過1月3日和1月18日兩輪RC后,PostgreSQL 8.3終于在本月初正式發(fā)布了。該版本有很多功能和性能上的重大提升,包括全文搜索、新的數(shù)據(jù)類型(XML、ENUM、UUID等)、并發(fā)autovacuum、異步提交等等,以及對(duì)Windows平臺(tái)更好的支持,如SSPI和VC++等。

    官方聲明: http://www.postgresql.org/about/news.918
    Release Notes: http://www.postgresql.org/docs/8.3/static/release-8-3.html
    各版本功能對(duì)照: http://www.postgresql.org/about/featurematrix
    下載: http://www.postgresql.org/ftp/


    posted @ 2008-02-07 10:04 laogao 閱讀(817) | 評(píng)論 (0)編輯 收藏


    如果你有一定的Java基礎(chǔ),想快速的嘗嘗動(dòng)態(tài)語言的味道,Groovy是個(gè)自然的過渡選擇。今天無意中看到一篇介紹Groovy的文章,很短,也很有趣,從一個(gè)典型的Java程序開始,一步一步"Groovy化",最終改造成一個(gè)完整的Groovy程序:

    http://java.dzone.com/news/java-groovy-few-easy-steps


    如果你對(duì)當(dāng)下動(dòng)態(tài)語言的現(xiàn)狀有所了解,那你多半已經(jīng)知道能在JVM中運(yùn)行的動(dòng)態(tài)語言,遠(yuǎn)不止Groovy一種,那么什么理由會(huì)讓你選擇Groovy而非Jython、JRuby或者其他類似的語言呢?筆者認(rèn)為主要還是編碼習(xí)慣和風(fēng)格,Groovy是這些語言中最接近Java的。Jython和JRuby都是從其他成功的動(dòng)態(tài)語言"移植"過來,帶有明顯的Python、Ruby語法特征和習(xí)慣。選擇Jython或者JRuby的朋友,我想大都是原本就有Python或者Ruby的基礎(chǔ),舍不得Python和Ruby的一些很方便的語法和編碼風(fēng)格/習(xí)慣/哲學(xué),或者干脆就是為了將Python和Ruby世界的一些框架引入到Java中,或者說是讓Python/Ruby應(yīng)用能夠更好的利用Java平臺(tái)已有的資源。如果你在動(dòng)態(tài)語言上沒有這方面的需求,只是為了讓你的Java應(yīng)用更動(dòng)態(tài),選擇Jython或者JRuby只能是憑空增加學(xué)習(xí)難度。要知道,Python和Ruby都是很有特點(diǎn)、很有個(gè)性的語言(其實(shí)Java又何嘗不是),要從Java的思維和哲學(xué),轉(zhuǎn)向Python/Ruby的思維和哲學(xué),并不是那么容易做到和做好的。


    posted @ 2008-01-27 17:14 laogao 閱讀(1350) | 評(píng)論 (2)編輯 收藏


    使用Linux很便利的一個(gè)地方,就是它把所有資源都按照文件的方式抽象出來,于是我們?cè)谧x寫任何外部資源時(shí),都像是操作本地普通文件一樣。訪問Windows共享,除了在Nautilus/Konquerer使用smb://,或者命令行使用smbclient之外,當(dāng)然還有更c(diǎn)ool的方式,那就是smbmount。

    在Ubuntu下使用smbmount,需要安裝smbfs包,通過sudo apt-get install smbfs即可。調(diào)用方法如下,新建/share目錄后:
    $ [sudo] smbmount //10.10.10.10/share /share -o username=<user_name>,password=<password>,codepage=cp936,iocharset=ut8

    注意最后兩個(gè)參數(shù),Linux默認(rèn)是UTF-8編碼,中文Windows則是GBK,按codepage劃分,也就是cp936。如果你的環(huán)境和上述不一致,則需要相應(yīng)的修改codepage和iocharset參數(shù)。成功以后,我們就可以通過熟悉的ls, cp, cat, less, more, mv, zip, tar, rm, rename, nano, vi等等我們?cè)贚inux下已經(jīng)習(xí)以為常的方式來操作了,就和本地文件夾一樣。

    如果想在Linux啟動(dòng)時(shí)自動(dòng)把Windows共享掛進(jìn)來,則可以修改/etc/fstab,增加如下內(nèi)容:
    //10.10.10.10/share /share smbfs username=<user_name>,password=<password>,codepage=cp936,iocharset=ut8,umask=000 0 0


    posted @ 2008-01-18 12:54 laogao 閱讀(1724) | 評(píng)論 (0)編輯 收藏


    不知不覺中,從我在BlogJava第一篇隨筆至今,BlogJava已經(jīng)伴隨我走過了三個(gè)年頭。不由得感慨:時(shí)間過得真快。

    前不久剛看完Coen兄弟的新片 No Country for Old Men (豆瓣),挺打動(dòng)我的。我們每天都在變老,世界也似乎注定會(huì)有一天變成我們不認(rèn)識(shí)、也無力改變的樣子,沒有原因,沒有目的。從混沌中來,還得回到混沌中去。


    posted @ 2008-01-13 16:58 laogao 閱讀(438) | 評(píng)論 (1)編輯 收藏


    http://it.slashdot.org/article.pl?sid=08/01/01/137257
    (來自Slashdot社區(qū)的文章鏈接)

    M$ Office 2003 SP3將取消對(duì)一部分老Office文件格式的支持,官方的說法是這些文件格式不夠安全。本來就是二進(jìn)制格式的文件了,隔幾年你就搞個(gè)新的不兼容的格式,這是要存用戶的數(shù)據(jù)還是你的數(shù)據(jù)啊?逼(誘?)大家升級(jí)?

    我本人不用M$ Office,但我周圍許多人在用,而且大都很熱衷于嘗試新的版本。我想問問還在繼續(xù)使用M$ Office的朋友,如果10年后,你今天寫下的文檔,再無法用市面上找的到的工具打開,你還會(huì)繼續(xù)放心的使用今天這個(gè)工具嗎?

    如果工具有bug、不安全,那你就做個(gè)沒bug、安全的工具,別老拿文件格式當(dāng)幌子,這不是禍禍人么?


    另一篇挺有趣的文章:
    Why I hate Microsoft


    posted @ 2008-01-02 21:33 laogao 閱讀(514) | 評(píng)論 (3)編輯 收藏


    "Gloomy Sunday"原本是一首鋼琴曲的名字,"憂郁的星期天",據(jù)說N多人聽過之后選擇了在這首曲子的陪伴下結(jié)束自己的生命。而今天要向大家推薦的,是一部由匈牙利、法國和德國聯(lián)合拍攝的電影: 《Gloomy Sunday - Ein Lied von Liebe und Tod (憂郁星期天 - 愛與死之歌)》。故事有關(guān)愛情、自由、尊嚴(yán),講述的是二戰(zhàn)大背景下發(fā)生在布達(dá)佩斯的一段凄美的故事,情節(jié)飽滿、張馳有度,是一部近年來難得一見的佳作。



    影片一開始,映入大家眼簾的,是美麗的布達(dá)佩斯和流經(jīng)這里的多瑙河:鏡頭從Budavári palota(城堡山)、Erzsébet híd(伊麗莎白橋)一直拍到Gellért hegy(蓋雷爾特山)腳下的Szabadság híd(自由橋),德國大使館的車隊(duì)正從這里經(jīng)過。Szabó餐廳內(nèi)的人們正在緊張的準(zhǔn)備晚宴,今天他們的客人,是半個(gè)世紀(jì)以前,在布達(dá)佩斯從納粹手下"解救"了上千名匈牙利猶太人的前德國軍官Hans Wieck,今天是他80歲生日,帶著他的妻子故地重游,重溫當(dāng)年的記憶。晚餐開始,插著80歲標(biāo)簽的肉卷上桌,Hans招呼一旁的小提琴手,讓他表演那首名曲,也就是"Gloomy Sunday",一桌人一邊用餐一邊欣賞著動(dòng)聽的音樂。這時(shí)Hans的目光集中到了擺放在鋼琴上的一張黑白照片,照片上是一位端莊美麗的女人,似乎想起了什么,突然表情僵硬,倒在地板上猝死,故事由此展開。


    posted @ 2007-12-30 17:36 laogao 閱讀(476) | 評(píng)論 (0)編輯 收藏


    前段時(shí)間工作比較忙,想來Gusty Gibbon也已經(jīng)出來2個(gè)月了,還沒來得及好好把玩,這周終于有點(diǎn)時(shí)間和精力把它下載下來安裝到本本上。

    這個(gè)版本用下來最直接的感受有兩點(diǎn):
    1- 默認(rèn)的中文字體支持更好了,一方面字體的處理更加協(xié)調(diào)一致,不像之前默認(rèn)時(shí)經(jīng)常中文字符一大一小的,默認(rèn)采用英文字體時(shí)對(duì)中文的顯示也做的不錯(cuò)。
    2- Compiz和Beryl復(fù)和之后,成了Ubuntu新的標(biāo)配,省得大家費(fèi)力折騰從其他的apt源或者源碼安裝了。

    當(dāng)然了,其他細(xì)微的改進(jìn)還有很多,比如Pidgin、默認(rèn)的ntfs-3g、keyring的處理、閉源的驅(qū)動(dòng)和codecs等等。總的來說,Gusty Gibbon在Feisty Fawn基礎(chǔ)上,更加成熟,也讓我們對(duì)明年4月的Hardy Heron這個(gè)在6.06之后第二個(gè)LTS版本有了更多的期待。

    這里有一個(gè)截圖,很多東東還沒有裝,基本上也沒花太多時(shí)間去hack,感覺就已經(jīng)挺漂亮,也挺好用的了,呵呵:
    screenshot_20071222.png

    BTW,AWN(Avant Window Navigator)已經(jīng)確認(rèn)會(huì)包含在明年8.04(Hardy Heron)默認(rèn)的apt源中,這對(duì)AWN fans們,以及所有喜歡"eye candy"但又不愿花時(shí)間去折騰的朋友們來說,無疑是個(gè)好消息。


    posted @ 2007-12-22 23:57 laogao 閱讀(507) | 評(píng)論 (0)編輯 收藏


    算到現(xiàn)在,已經(jīng)有將近半年沒有寫過技術(shù)文章了,手癢癢,于是拿Django來說事,希望最終的產(chǎn)出能夠做成一個(gè)簡短易懂的Django快速起步,讓初次接觸Django的朋友能夠在最短的時(shí)間內(nèi)了解Django的基本概念和結(jié)構(gòu)。

    Django是使用Python實(shí)現(xiàn)的一個(gè)基于MVC的web應(yīng)用框架,類似Ruby世界的Ruby on Rails。如果你是通過Google搜到這篇文章,那么說明你已經(jīng)對(duì)Django有所耳聞,并且愿意了解更多Django相關(guān)的信息。我在這里就不多廢 話Ruby vs Python或者Rails vs Django,直奔主題。

    在寫這篇文章時(shí),最新的CPython版本為2.5.1,Django版本為0.96,如無特別說明,本文所有介紹和示例均以此環(huán)境為準(zhǔn)。

    0- 在開始之前,首先當(dāng)然是安裝一個(gè)基本能用的開發(fā)環(huán)境。

    如果你的操作系統(tǒng)是Linux或者其他類Unix系統(tǒng),很可能已經(jīng)預(yù)裝了Python,可以在命令行執(zhí)行python -V查看Python版本。如果你是Windows操作系統(tǒng),或者想嘗試不同版本的Python,那么可以到http://www.python.org/下載相應(yīng)的安裝包進(jìn)行安裝。

    有了Python以后,到http://www.djangoproject.com/下載Django,解壓以后,cd到解壓出來的目錄,執(zhí)行python setup.py install。

    為了能夠做出一個(gè)基本的多層web應(yīng)用,還需要安裝一個(gè)數(shù)據(jù)庫,如果沒有特別喜好和偏向,推薦PostgreSQL,可以在http://www.postgresql.org/找到合適的版本下載和安裝。

    我們還缺少一個(gè)數(shù)據(jù)庫驅(qū)動(dòng),在http://www.initd.org/pub/software/psycopg/可以找到用于連接PostgreSQL的psycopg2,安裝方法類似Django。

    1- django-admin.py startproject

    所有環(huán)境OK以后,我們開始動(dòng)手把玩Django,首先找一個(gè)干凈的目錄,執(zhí)行
    $ python django-admin.py startproject hello

    上面這行命令會(huì)新建一個(gè)hello子目錄,包含以下文件:
    __init.py__: 表示該目錄存放Python程序
    manage.py: 提供Django項(xiàng)目相關(guān)的管理操作
    settings.py: 相當(dāng)于該Django項(xiàng)目的全局設(shè)置
    urls.py: 用于配置URL映射,基本上就是通過正則表達(dá)式指定不同URL由相應(yīng)的view方法相應(yīng)

    2- manage.py runserver

    至此我們已經(jīng)搭起了一個(gè)基本的Django項(xiàng)目框架,執(zhí)行
    $ python manage.py runserver
    命令行會(huì)提示在8000端口運(yùn)行一個(gè)開發(fā)用的web server,轉(zhuǎn)到瀏覽器的http://localhost:8000/即可看到It worked!的提示信息。你也可以指定端口號(hào),方法是python manage.py runserver XXXX。

    3- settings.py

    接下來我們做一個(gè)完整的從model/數(shù)據(jù)庫到view/template的例子。修改settings.py:
    DATABASE_ENGINE?=?'postgresql_psycopg2'
    DATABASE_NAME?
    =?'hello'?#?Your?db?name
    DATABASE_USER?=?'postgres'?#?Your?db?user
    DATABASE_PASSWORD?=?'********'?#?Your?db?password
    DATABASE_HOST?=?''
    DATABASE_PORT?
    =?''

    INSTALLED_APPS?
    =?(
    ????
    'django.contrib.auth',
    ????
    'django.contrib.contenttypes',
    ????
    'django.contrib.sessions',
    ????
    'django.contrib.sites',
    ????
    'hello',?#?Our?new?project
    )?

    4- models.py

    新建models.py:
    from?datetime?import?datetime
    from?django.db?import?models

    class?Book(models.Model):
    ????isbn????????
    =?models.SlugField(maxlength=20)
    ????title???????
    =?models.CharField(maxlength=200)
    ????author??????
    =?models.CharField(maxlength=200)
    ????description?
    =?models.TextField(blank=True,null=True)
    ????published???
    =?models.DateTimeField(default=datetime.now)
    這里我們從django.db.models.Model繼承我們的model類Book,同時(shí)還用到了models中現(xiàn)成的字段類,如 SlugField、CharField、TextField、DateTimeField等。大家比較陌生的恐怕是SlugField,這個(gè)基本上類似 CharField,不過增加了其內(nèi)容需要符合URL要求的限制條件。

    執(zhí)行下面的命令測試數(shù)據(jù)庫腳本的生成:
    $ python manage.py sql hello
    應(yīng)該看到如下輸出結(jié)果:
    BEGIN;
    CREATE TABLE "hello_book" (
    "id" serial NOT NULL PRIMARY KEY,
    "isbn" varchar(20) NOT NULL,
    "title" varchar(200) NOT NULL,
    "author" varchar(200) NOT NULL,
    "description" text NULL,
    "published" timestamp with time zone NOT NULL
    );
    COMMIT;

    確認(rèn)無誤后可以通過下面的命令提交到數(shù)據(jù)庫:
    $ python manage.py syncdb
    其間會(huì)要求我們創(chuàng)建一個(gè)管理員賬號(hào),如果暫時(shí)不打算做admin頁面,可以跳過。

    5- views.py

    model有了之后,接下來我們就可以開始畫視圖了。由于篇幅和時(shí)間有限,我僅簡單介紹一下Django的template,然后實(shí)現(xiàn)一個(gè)最基本的圖書清單頁面。

    首先定義圖書清單的URL,在urls.py中:
    from?django.conf.urls.defaults?import?*

    urlpatterns?
    =?patterns('hello.views',
    ????(r
    '^hello/books/$',?'book_list'),
    )
    含義為hello/books/這個(gè)URI資源對(duì)應(yīng)的相應(yīng)view方法為hello.views.book_list。

    新建templates目錄,然后新建books.html:
    <html??xmlns="http://www.w3.org/1999/xhtml"?lang="zh-cn"?xml:lang="zh-cn">
    <head>
    <title>{{?title|escape?}}</title>
    </head>
    <body>
    <h2>{{?title?}}</h2>
    <table?border="1">
    ??
    <tr><th>ISBN</th><th>書名</th><th>作者</th><th>出版日期</th></tr>
    ??{%?for?book?in?books?%}
    ??
    <tr>
    ????
    <td>{{?book.isbn?}}</td>
    ????
    <td>{{?book.title?}}</td>
    ????
    <td>{{?book.author?}}</td>
    ????
    <td>{{?book.published?}}</td>
    ??
    </tr>
    ??{%?endfor?%}
    </table>
    </body>
    </html>
    Django模板的語法是{{}}表示引用,{%%}表示代碼,使用起來也很直觀,甚至支持UNIX風(fēng)格的filter,如這里的{{ title|escape }}。

    新建views.py:
    from?hello.models?import?*
    from?django.shortcuts?import?render_to_response

    def?book_list(request):
    ????title?
    =?'Book?List'
    ????books?
    =?Book.objects.all()
    ????
    return?render_to_response('books.html',?{'title'?:?title,?'books'?:?books})
    最終頁面上的內(nèi)容,通過title和books兩個(gè)參數(shù)傳遞給tempate(books.html)處理。

    修改settings.py:
    TEMPLATE_DIRS?=?(
    ????
    '/opt/PROJECTS/Django/hello/templates/',
    )
    指定templates目錄位置,注意需要使用絕對(duì)路徑和'/',無論是Unix還是Windows系統(tǒng)。

    我們手工造一些數(shù)據(jù)之后,就可以通過http://localhost:8000/hello/books/訪問我們用Django實(shí)現(xiàn)的這個(gè)簡單頁面了。

    6- What's next

    通過上面的簡單介紹,相信哪怕是初次接觸Django的朋友,也能夠?qū)jango有一個(gè)初步的認(rèn)識(shí)。其實(shí)Django并不難學(xué),并且隨著學(xué)習(xí)的深入,你一定能發(fā)現(xiàn)更多的驚喜,不論是來自Django本身,還是Python及其龐大的第三方類庫。

    如果有時(shí)間,建議嘗試一下Django的admin pages,即為我們的model提供自動(dòng)化、網(wǎng)頁化的增刪改查操作。啟用方法如下:

    修改models.py (增加class Admin):
    from?datetime?import?datetime
    from?django.db?import?models

    class?Book(models.Model):
    ????isbn????????
    =?models.SlugField(maxlength=20)
    ????title???????
    =?models.CharField(maxlength=200)
    ????author??????
    =?models.CharField(maxlength=200)
    ????description?
    =?models.TextField(blank=True,null=True)
    ????published???
    =?models.DateTimeField(default=datetime.now)
    ????
    class?Admin:
    ????????
    pass

    修改settings.py和urls.py,加入admin支持:
    [settings.py]
    INSTALLED_APPS?=?(
    ????
    'django.contrib.auth',
    ????
    'django.contrib.contenttypes',
    ????
    'django.contrib.sessions',
    ????
    'django.contrib.sites',
    ????
    'django.contrib.admin',
    ????
    'hello',
    )
    [urls.py]
    urlpatterns?=?patterns('hello.views',
    ????(r
    '^hello/books/$',?'book_list'),
    ????(r
    '^hello/admin/',?include('django.contrib.admin.urls')),
    )

    Note:
    # 為了成功運(yùn)行admin pages,需要首先執(zhí)行python manage.py syncdb admin以創(chuàng)建django_admin_log表。
    # 如果前面跳過了創(chuàng)建管理員步驟,簡單的方法可以刪掉auth_user表,然后python manage.py syncdb重建。

    按照我們urls.py的配置,admin pages可以通過http://localhost:8000/hello/admin/訪問。Enjoy!


    posted @ 2007-11-28 00:57 laogao 閱讀(762) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題
    共34頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 Last 
    主站蜘蛛池模板: 亚洲 暴爽 AV人人爽日日碰| 亚洲日韩在线视频| 国产偷伦视频免费观看| 久久精品国产亚洲αv忘忧草| 免费一级一片一毛片| 暖暖免费在线中文日本| 亚洲日韩精品无码专区| 亚洲国产另类久久久精品黑人| 成年性生交大片免费看| 成在线人视频免费视频| 亚洲熟伦熟女专区hd高清| 亚洲免费在线视频| 免费人成网站7777视频| 亚洲成人一区二区| 免费在线观看的网站| 在线人成免费视频69国产| 老司机午夜在线视频免费观| 亚洲国产一区在线观看| 亚洲成AV人片在线观看无| 亚洲 无码 在线 专区| 在线视频观看免费视频18| 久操免费在线观看| 99久久精品免费视频| 三级黄色在线免费观看| 免费观看在线禁片| 999久久久免费精品国产| 国产精品白浆在线观看免费 | 亚洲第一福利网站在线观看| 亚洲精品456播放| 国产老女人精品免费视频| 国产va免费精品观看精品| 国产精品免费综合一区视频| 亚洲性在线看高清h片| 亚洲成av人片一区二区三区 | 国产精品色拉拉免费看| 国产精品极品美女免费观看| 伊人亚洲综合青草青草久热| 亚洲?v女人的天堂在线观看| 亚洲高清国产AV拍精品青青草原| 亚洲短视频在线观看| 久久久久亚洲AV无码麻豆|