設計Python目標何在?
開發人員首先在進行對Python開發時,有一個明確的目標,所謂Python目標為:Python可以使用戶避免過分的語法的羈絆而將精力主要集中到所要實現的程序任務上。
如果有人問我最喜歡django什么,我會耗不猶豫的告訴你是django的orm,這個想法的產生完全來自于我長時間來積累的對hibernate的“不滿”。雖然從理智的角度來看,hibernate做的是非常的正確的,因為它并不是只針對互連網而產生的,它的主要市場應該還是在企業應用上。
不過把它用在互聯網并非不可以,只不過大家更多的時候會選擇ibatis之類,因為不知道hibernate的人總是會說hibernate沒有ibatis快(其實我最煩這個,片面的比較是沒有意義的)。正是Python目標是打造成java界一個全方位,全能的orm框架,所以的它學習曲線和使用的復雜度日益的提升。
要完全掌握好hibernate不是一件容易的事情(不要告訴我你會點crud,知道點lazy load你就掌握好hibernate了)。再回頭來看django的orm,如果說要把hibernate說清楚需要800頁的書,那么要把django的orm說清楚,200頁就夠了(事實上它的官方文檔只有十幾頁的樣子)。
下面我舉一個我正在做的例子,這里有一個自關聯的對象(事實上django的orm是基于model,這點和ror不太一樣,有人跟我講過ror是數據庫驅動),這個對象有一個父對象,通常我們的菜單會定義成這樣的對象,這樣的菜單可以無限級向下擴展:
- class Category(models.Model):
- id = models.AutoField('id', primary_key=True)
- name = models.CharField(maxlength=50)
- code = models.CharField(maxlength=50)
- parentCategory = models.ForeignKey('self', 'id', null=True)
- enable = models.BooleanField()
- def __str__(self):
- return self.name
- class Admin:
- list_display = ('id', 'name', 'code', 'parentCategory')
Python目標中又定義的Admin是為django的Admin模塊服務的。 瞧,我們定義的域模型只需要這些代碼就夠了,models.Model是父對象。所有的model對象都需要繼承這個對象,這個對象提供了很多常用的數據庫方法,不過不是基于sql的,還是基于對象的,如同Criteria一樣。下面列出常用的一些查詢Category的方法。
當然django的orm提供了很多很常用的功能,這里不一一舉例了,注意,這里我說的是提供了很多很常用的功能,至于hibenate中比較復雜的映射策略,在django中我并沒有看到。
但是我反而高興我沒有在django中找到這個功能,因為django本身的定位是快速的互連網開發,它不需要太多的關注這個領域很少出現的東西,這樣帶來的優點是學習曲線的降低和開發效率的提高。
【編輯推薦】