Amo Chen

Python mock 模組 - 淺談 spec, return_value, side_effect, wraps - Part 1

本文為 unittest.mock 系列文章:

Python 的測試案例(test case)寫到最後,免不了都會用上 unittest.mock 模組,原因在於有些類別、資料用 mock 的方式製造,遠遠方便於實際執行過一遍,例如測試使用者利用臉書登入,利用 mock 模擬實際臉書伺服器的回應遠比實際執行來得方便之外,也更加確保測試案例的可控制性,不會因為臉書伺服器故障或者網路問題而導致測試案例不穩定的情況發生。

然而 mock 對於初學者而言並不是十分容易理解,本文就談談 mock 中幾個重要的功能,了解這些功能之後,肯定能夠打通 mock 模組的任督二脈!

Posted on  Dec 16, 2018  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 3 min read

Python 用 Click 模組製作好用的指令

Python 作為一個成熟的腳本語言(scripting langage),已經發展相當多方便地模組、套件供開發者們使用,得益於其方便性與易用性, Python 也十分適合用來撰寫命令列(command line)工具,幫忙解決日常工作或生活上瑣事的自動化。

本文將介紹 Click 模組,讓開發者們能夠更方便地製作命令列工具。

學會 Click 後就能將各種製作指令的瑣事交給它 ,將能夠更專注於主要功能的開發!

Last updated on  Feb 13, 2024  in  Python 模組/套件推薦  by  Amo Chen  ‐ 5 min read

SQLAlchemy - 用 Mixin / Custom Base Classes 撰寫好維護的 ORM

越是使用 SQLAlchemy 就會越是發現 SQLAlchemy 在 Python ORM 的用心,例如 Mixin and Custom Base Classes 讓我們能夠將常見的資料庫欄位或者功能放在一起,變成 Mixin 類別(class) ,只要繼承該 Mixin 就能夠獲得相同的欄位與功能,減少重複的程式並提高可維護性( Djano 的 view 也有類似的作法,詳見 Using mixins with class-based views )。

Posted on  Dec 8, 2018  in  Python 模組/套件推薦  by  Amo Chen  ‐ 1 min read

Python - Flask i18n 多國語系功能實作

Django 對於 internationalization 與 localization 已提供成熟的解決方案,官方 文件 也寫得十分詳細。

而 Flask 作為一個輕量化的 Web Framework ,並沒有內建 i18n & l10n 的功能,不過只要安裝 Flask-Babel 也可以做到一樣的事情,剛好整合過程也十分簡單,特此紀錄一篇。

Posted on  Dec 7, 2018  in  Flask  by  Amo Chen  ‐ 4 min read

Python - JWT (JSON Web Token)

JWT(JSON Web Token) 是 RFC 7519 定義的一套標準,用以確保應用(application)之間傳遞訊息的安全性與完整性(integrity)。 JWT 常常與傳統的 Cookie/Session 技術一起被比較,然而這些技術是為了解決不同問題所發明的,也有各自的優缺點與特別合適的應用場景,沒有誰優誰劣的絕對定論。

目前實務上也越來越多應用會利用 JWT 傳遞資料,譬如 APP 在使用者登入時透過 JWT 取得常用的「非機敏性資料」(例如,暱稱、語系設定等等),並且儲存在裝置內,以減少詢問伺服器的次數,達到節省伺服器資源與增加下一次 APP 啟動速度的效果,運用得當的話也是一個加分的技術。

至於為什麼特別強調「非機敏性資料」,本文稍後將作解釋,先一起透過 Python 學習 JWT 相關的概念與使用吧!

Posted on  Dec 1, 2018  in  Python 模組/套件推薦  by  Amo Chen  ‐ 3 min read

Python - QueueHandler & QueueListener 範例

Python logging 模組提供很多內建的 handlers ,可以依照各種不一樣的使用情況選擇不同的 handler 處理日誌(log)。

然而,關於 QueueHandlers 的說明最為吸引我的目光:

Along with the QueueListener class, QueueHandler can be used to let handlers do their work on a separate thread from the one which does the logging.

This is important in Web applications and also other service applications where threads servicing clients need to respond as quickly as possible, while any potentially slow operations (such as sending an email via SMTPHandler) are done on a separate thread.

QueueHandler 與 QueueListener 讓我們能夠把 logging 的功能用另外的執行緒(thread)執行,如此一來像是 SMTPHandler 這種耗時間會拖慢 Web 應用或是其他服務的 handler 就可以在另外的執行緒執行,讓重要的服務能夠盡快地回應用戶,避免被 logging 拖慢回應速度。

Posted on  Nov 30, 2018  in  Python 程式設計 - 高階  by  Amo Chen  ‐ 2 min read