靈活易用的Python Web框架,Uliweb 0.2.2 發布

jopen 11年前發布 | 7K 次閱讀 Uliweb

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.confxxxx.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>

         本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
         轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
         本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!