靈活易用的Python Web框架,Uliweb 0.2.2 發布
Uliweb是一個新的Python Web Framework,它之所以會產生是因為現有的框架多少有些令人不滿意的地方,而且許多情況下這些不滿意的地方或多或少對于Web開發有影響,因此在經
過對不少框架的學習之后,我決定開發一個新的框架,希望可以綜合我認為其它框架中盡可能多的優點,同時使這個新的框架盡可能的簡單,易于上手和使用。不過 這個框架目前主要還是一個人在做,并且是業余在做,所以在進度上相對要慢一些。</p>
Uliweb并不是一個從頭開始的框架,它使用了一些較為成熟的庫,如:用來進行命令行、URL映射、Debug等核心處理的Werkzeug; 用來生成和處理請求、響應對象的webob;強大的ORM庫SqlAlchemy等等。Uliweb在開發 中還借鑒了象web2py的 Template模板模塊,Django的一些設計思想和成果。
Uliweb是采用類Django的MVT的模型,整個項目將由若干個相對獨立的app構成,每個app將有自已的配置文件,templates目
錄,static目錄等。URL可以自動映射也可以手動映射。模板中可以直接嵌入Python代碼,但是你不需要關心代碼的縮近,只要注意在塊結束前加上 pass語句。對數據庫的處理使用ORM的方式進行處理,同時你還可以直接使用底層的SQLAlchemy模塊。支持代碼和模板中的i18n的處理。 Uliweb還從Ulipad中移植了Plugin機制,可以方便地在框架中添加用戶特殊的處理。通過提供的命令行工具可以執行象啟動開發服務器,導出源 代碼等操作。現在Uliweb可以在GAE,mod_wsgi,fastcgi,scgi,cgi等多種環境下部署。</p>
除此之外,Uliweb框架中包含眾多自有的創新,如可用來生成HTML代碼和對上傳的數據進行校驗的Form處理,包括對模板和頁面的i18n處理,框 架處理代碼,從Ulipad中移植并進行了改造的插件機制。
值得一提的是,Uliweb框架中將開發自己的ORM 機制Uliorm,Uliorm在SqlAlchemy基礎之上進行封裝,同時參考了GAE中datastore的代碼。
Uliweb 0.2.2版本主要更新如下:
- 向 SortedDict 添加 clear() 函數
-
向 AddView, EditView 添加提交保護,缺省為不啟動。它可以用來防止多次提交。但對于 前端建議再増加相關的措施,比如在提交時將按鈕禁掉。如果想要其生效,需要傳入 protect=True 參數。
</li> -
向 uliweb find -t 命令添加 --blocks 和 --with-filename 參數,前者用來顯示在 模板中定義的塊信息,后者用來列出定義相應塊所在的模板文件名。同時向settings.ini 中添加 GLOBAL/DEBUG_TEMPLATE 配置項,用來控制模板是否顯示調試用的注釋,用來區分 不同的塊的開始和結束。但是這種輸出具有一定的破壞性,比如非HTML的結果等。所以只 能用于調試,正式使用一定要關閉。比如,打開之后,在輸出的模板中可能有:
<!-- BLOCK title (apps/theme/templates/theme/skeleton.html) --> <!-- END title -->
</li> </ul>- 増加filedown.py在下載時對 content-range 的處理,感謝 zhangchunlin 提供代碼。
-
改進 import_attr() 的處理,増加對 pkg_resource 入口字符串格式的支持,比如: x.y.z 原來是根據從左向右逐層導入時,動態來判斷后面的是模塊還是屬性,如果是 模塊,則繼續導入,如果是屬性則使用 getattr() 來處理。現在則可以定義為: x.y:z.c, 這樣可以更清晰表示 : 號前是模塊,后面是屬性。
</li> -
向 uliweb.contrib.orm 上添加 requirements.txt,可以直接用 uliweb install 來安裝: SQLAlchemy, MySQL-python, alembic(這個是我修改的版本)。注意,要在你的應 中用先配置 uliweb.contrib.orm 才可以。因為這個requirements.txt是在app上定義的。
</li> - 添加 LOGO 文件,可以用這里面的圖片來展示 uliweb。
-
向 runserver 命令増加 --color 參數,可以輸出彩色日志。缺省是不輸出。同時,你可以根據需要,在settings.ini中對顏色進行配置,如缺省的為:
[LOG.COLORS] DEBUG = 'white' INFO = 'green' WARNING = 'yellow' ERROR = 'red' CRITICAL = 'red'
</li> </ul>支持的顏色為: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE.
-
増加
config
命令。它可以用來向控制臺輸出配置文件的模板。目前可以生成 nginx, supervisor
相關的配置。你也可以在自已的app中定義這樣的輸出。只要在app下創建template_files/config
的目錄結構,然后創建xxxx.conf
和xxxx.ini
文件。在xxxx.ini
中用來定義一些
變量,這些變量將用于xxxx.conf
中。ini格式定義示例為:
[INPUT] port = '', 80 path =
port為變量名,值為一個tuple或者不定義,第一個值為提示用的文本,如果為空則表示沒有額外 說明。第二個表示缺省值。
</li> -
xxxx.conf 為uliweb格式的模板,如果存在模板變量,則需要與ini中的一致。同時 有一些預定義的變量,如: project 表示項目目錄名稱,project_dir 表示項目目錄。
執行時可以: uliweb config xxxx
</li> -
優化 support 命令,可以象config命令一樣,在你的app下創建 template_files/support/xxxx 這樣的目錄結構,下面放執行 uliweb support xxxx 時將要拷貝的文件及目錄即可。
</li> - 修復 tmplate 中normcase的bug,改為 normpath 。
-
重構ORM的關系字段的處理,讓關系的處理為延遲執行(待get_model時才執行)。這樣 是為了解決存在循環引用的問題,但是帶來可能的不兼容問題,就是反向關系的獲取。 如果A和B都是在一個文件中定義,那么在導入A時,B自然也被引入,如果B上有對A的關 系定義,則A自動被注入一個反向關系。但是現在則要顯示執行 get_model('B')才可以 創建反向關系。
</li> - get_model() 和 set_model() 中的Model名不再區分大小寫。
- 修復當重名的URL定義存在時,后定義的沒有替換前面定義的URL的bug。
- 修復 rbac 中沒有使用 functions.has_role() 和 functions.has_permission() 的bug。
-
修復rules.py在處理View類繼承時的bug。添加 expose(replace=True) 的支持,用來實 現View類的替換方式,即不會増加新的一套URL,而是為了修改原來的View方法處理。 如果replace=False,或不寫,則為普通的派生方式.
</li> -
向expose()増加template參數,這樣除了可以在view函數中指定 response.tmplate = 'xxxx.html 外 還可以直接在expose上指定。執行優先級,以response.template最高。
</li> -
恢復 ORM 配置中關于 NULLABLE = False 的配置。這樣字段缺省允許為 null。
</li> </ul>Plugs: https://github.com/limodou/plugs Uliweb APP收集Par: https://github.com/limodou/par Markdown解析Uliweb-Doc: https://github.com/limodou/uliweb-doc 文檔UliwebZone: https://github.com/limodou/uliwebzone 社區項目本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
-