上篇《bottle的外掛程式與view裝飾器衝突問題》裡說到的問題就是我在寫這幾個外掛程式時碰到的問題。
為便於使用bottle寫了一組外掛程式。最初自己用的時候是把所有功能都寫在乙個外掛程式裡,感覺有點笨重,不適合靈活組合,所以分拆改寫成現在的樣子。
beaker.beakerplugin
params.paramsplugin
login.loginplugin
beaker session外掛程式,比bottle的官方beaker外掛程式更便於使用——其實官方的beaker外掛程式什麼事都沒做,跟直接用beaker沒什麼區別。
建構函式:
beakerplugin(keyword="session")
引數:
keyword : beaker session使用的引數名,預設為session,如請求響應函式不包含此引數,則此外掛程式被忽略,如包含此引數,則自動從請求環境中讀取beaker的session物件
無可用route引數。
必須配合beaker midware使用,使用方法見beaker文件或示例程式demo.py。
引數外掛程式,自動把請求引數轉為函式呼叫引數,預設使用utf-8編碼轉為unicode,自動根據請求方法讀取query或forms,如果設定了json_params選項,則讀取json。
建構函式:
paramsplugin(json_params=false, encode="utf-8")
引數:
json_params : 是否使用json引數。預設為false,如果設定為true則解析 bottle.request.json 的值,以dict方式解析為對應引數。
encode : 指定請求編碼方式。預設為utf-8。
route引數:
在請求的route中也可以使用 json_params ,用於對特定請求使用json格式。
簡單的登入處理外掛程式。如果請求需要使用者登入時加上登入引數(預設為login),則會在處理請求前呼叫login_func處理登入操作,成功則將結果返回給login引數。
因為處理登入操作通常需要依賴資料庫和session,所以需要兩個額外引數:db和session。這兩個引數將會被傳遞給login_func。
所以使用本外掛程式至少需要同時安裝乙個資料庫(或類似的如sqlalchemy)外掛程式,和類似本外掛程式包中的beakerplugin這樣的session外掛程式。
建構函式:
loginplugin(login_func, keyword="login", dbkeyword="db", sessionkeyworkd="session")
引數:
login_func:登入處理函式,無預設值,帶兩個引數:db和session用於傳入資料庫和session,引數值來值相應外掛程式(所以其它外掛程式必須先於本外掛程式安裝),返回值將被賦給login引數。
keyword:login引數名,預設為login。
dbkeyword:資料庫外掛程式的引數名,預設為db。
sessionkeyword:session外掛程式的引數名,預設為session
無可用route引數
原始碼已發在github。
Bottle的外掛程式與view裝飾器衝突問題
其實這個問題由來已久,早在2012年就有人在bottle那報告過,但是因為python的inspec庫本身的問題,它的wraps函式不能保留被包裝函式的引數資訊,所以一直不能徹底解決。問題大致是這樣 view index def get index return dict a a 上面是乙個典型的使...
幾個js小外掛程式
1.three.js 超過46k的星星,這個流行的庫提供了非常多的3d顯示功能,以一種直觀的方式使用 webgl。這個庫提供了 js 超過20k的星星,是乙個 js 動畫庫,可以處理css屬性,單個css轉換,svg 或任 何 dom 屬性以及 js 物件。此庫允許咱們鏈結多個動畫屬性,將多個例項同...
幾個好用的vim外掛程式
1.winmanager 可將檔案瀏覽器 buffer列表整合在側邊欄,它依賴於bufexplorer 2.nerdtree 樹狀目錄外掛程式,比winmanager的檔案瀏覽更美觀。3.txtbrowser 純文字瀏覽,為純文字自動生成目錄樹側邊欄 taglist視窗 語法高亮等,用來看txt文件...