Read Sean

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


          一篇關于目前開發中的KDE 4.1最新進展介紹
          http://polishlinux.org/kde/kde-41-visual-changelog-rev-783000/

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


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


          最近嘗試把一個Oracle數據庫,連同構建在這個數據庫上的Java應用移植到PostgreSQL環境。在移植過程中,總結了一些要點,一方面作為筆記備忘,一方面也給有類似任務需要處理而又無從下手的朋友作為參考。

          1- 首先是準備PostgreSQL環境。有條件的話,最好是找一臺空閑的PC機作為測試服務器,安裝Linux或BSD,然后從源碼編譯最新的PostgreSQL 8.3.0。編譯時,通過configure指定--with-perl和--with-python以支持PL/Perl和PL/Python。因為絕大多數Linux發行版都已自帶Perl和Python,不必額外安裝。

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

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

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

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

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

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

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

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

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

          [更新 20080323] 移植schema和數據時,比ora2pg更方便的一種方式是利用EnterpriseDB的Migration Tool,將Oracle的JDBC驅動ojdbc14.jar拷貝到EnterpriseDB安裝路徑下的jre/lib/ext下后,啟動Developer Studio即可建立Oracle連接,選中schema后,可以通過右鍵Online Migration將schema、數據、函數包等等一次性通通導入EnterpriseDB。如果要繼續往"純"PostgreSQL移,從EDB做backup,然后到PostgreSQL下做restore,這樣會丟掉函數包,因為畢竟EDB在PostgreSQL基礎上做了相當改造以和Oracle兼容,不過函數包之類還是手工移比較穩妥。


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


          啥也不說了,開心!


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


          在JRuby得到Sun的認可并成功發布1.0,已經向1.1邁進之時,比Ruby應用更廣、更早出現JVM運行版本的Python也終于得到了Sun的重視:

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

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


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


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

          為默默耕耘的人鼓掌。


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


          本賽季狀態漸佳,外號"禁區之狐"的阿森納小將Eduardo在英超客場對陣Birmingham City中慘遭暗害:

          (由于實在太過血腥,不忍心放在首頁,請點擊查看)

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


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


          春節期間真是好事不斷啊,繼PostgreSQL 8.3正式release后,Grails也如約發布1.0版。作為受到Ruby on Rails啟發開動的"Groovy版Rails"項目,它在設計哲學上和Rails,包括JRuby版的Rails,有著很大的不同,Rails是從頭開始用Ruby完整實現從表現層到ORM所有功能,而Grails則是利用Java社區現有的成熟開源框架,如Spring、Hibernate等,在此基礎上整合出一套完整的Web應用框架,有點類似Pylons和Django的區別。

          之前一篇隨筆也提到過,和其它在JVM中運行的動態語言如Jython、JRuby不同的是,Groovy對于有Java基礎的人們來說,學習曲線幾乎是平的,上手很快,如果你同時也熟悉Spring和Hibernate等,那么Grails更是不二之選。

          官網: 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 閱讀(748) | 評論 (1)編輯 收藏


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

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


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


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

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


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


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


          使用Linux很便利的一個地方,就是它把所有資源都按照文件的方式抽象出來,于是我們在讀寫任何外部資源時,都像是操作本地普通文件一樣。訪問Windows共享,除了在Nautilus/Konquerer使用smb://,或者命令行使用smbclient之外,當然還有更cool的方式,那就是smbmount。

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

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

          如果想在Linux啟動時自動把Windows共享掛進來,則可以修改/etc/fstab,增加如下內容:
          //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 閱讀(1734) | 評論 (0)編輯 收藏


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

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


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


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

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

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

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


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


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


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



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


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


          前段時間工作比較忙,想來Gusty Gibbon也已經出來2個月了,還沒來得及好好把玩,這周終于有點時間和精力把它下載下來安裝到本本上。

          這個版本用下來最直接的感受有兩點:
          1- 默認的中文字體支持更好了,一方面字體的處理更加協調一致,不像之前默認時經常中文字符一大一小的,默認采用英文字體時對中文的顯示也做的不錯。
          2- Compiz和Beryl復和之后,成了Ubuntu新的標配,省得大家費力折騰從其他的apt源或者源碼安裝了。

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

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

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


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


          算到現在,已經有將近半年沒有寫過技術文章了,手癢癢,于是拿Django來說事,希望最終的產出能夠做成一個簡短易懂的Django快速起步,讓初次接觸Django的朋友能夠在最短的時間內了解Django的基本概念和結構。

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

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

          0- 在開始之前,首先當然是安裝一個基本能用的開發環境。

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

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

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

          我們還缺少一個數據庫驅動,在http://www.initd.org/pub/software/psycopg/可以找到用于連接PostgreSQL的psycopg2,安裝方法類似Django。

          1- django-admin.py startproject

          所有環境OK以后,我們開始動手把玩Django,首先找一個干凈的目錄,執行
          $ python django-admin.py startproject hello

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

          2- manage.py runserver

          至此我們已經搭起了一個基本的Django項目框架,執行
          $ python manage.py runserver
          命令行會提示在8000端口運行一個開發用的web server,轉到瀏覽器的http://localhost:8000/即可看到It worked!的提示信息。你也可以指定端口號,方法是python manage.py runserver XXXX。

          3- settings.py

          接下來我們做一個完整的從model/數據庫到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,同時還用到了models中現成的字段類,如 SlugField、CharField、TextField、DateTimeField等。大家比較陌生的恐怕是SlugField,這個基本上類似 CharField,不過增加了其內容需要符合URL要求的限制條件。

          執行下面的命令測試數據庫腳本的生成:
          $ python manage.py sql hello
          應該看到如下輸出結果:
          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;

          確認無誤后可以通過下面的命令提交到數據庫:
          $ python manage.py syncdb
          其間會要求我們創建一個管理員賬號,如果暫時不打算做admin頁面,可以跳過。

          5- views.py

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

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

          urlpatterns?
          =?patterns('hello.views',
          ????(r
          '^hello/books/$',?'book_list'),
          )
          含義為hello/books/這個URI資源對應的相應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風格的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})
          最終頁面上的內容,通過title和books兩個參數傳遞給tempate(books.html)處理。

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

          我們手工造一些數據之后,就可以通過http://localhost:8000/hello/books/訪問我們用Django實現的這個簡單頁面了。

          6- What's next

          通過上面的簡單介紹,相信哪怕是初次接觸Django的朋友,也能夠對Django有一個初步的認識。其實Django并不難學,并且隨著學習的深入,你一定能發現更多的驚喜,不論是來自Django本身,還是Python及其龐大的第三方類庫。

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

          修改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:
          # 為了成功運行admin pages,需要首先執行python manage.py syncdb admin以創建django_admin_log表。
          # 如果前面跳過了創建管理員步驟,簡單的方法可以刪掉auth_user表,然后python manage.py syncdb重建。

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


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

          僅列出標題
          共34頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 Last 
          主站蜘蛛池模板: 金湖县| 山阴县| 德化县| 张掖市| 肥乡县| 外汇| 仙居县| 石阡县| 浮山县| 长沙县| 旬邑县| 台中市| 射阳县| 万源市| 芒康县| 本溪| 新民市| 东乡县| 杭锦后旗| 仙桃市| 舞钢市| 怀集县| 二连浩特市| 九江县| 宁晋县| 同德县| 会东县| 北票市| 从江县| 宜川县| 福建省| 寻甸| 常熟市| 措美县| 惠安县| 德庆县| 岳普湖县| 白玉县| 凤庆县| 临沧市| 阿图什市|