blog.kyomind.tw Open in urlscan Pro
185.199.111.153  Public Scan

Submitted URL: http://blog.kyomind.tw/
Effective URL: https://blog.kyomind.tw/
Submission: On October 31 via api from US — Scanned from IT

Form analysis 0 forms found in the DOM

Text Content

Code and Me

文章列表
分類
標籤
排名
系列
訂閱
關於

Code and Me
 * 文章列表
 * 分類 ⌵
   心得 (39) 書評 × 筆記 (13) 軟體開發 (24) Django (12) Django Ninja 系列 (30) Weekly Review
   (38) VS Code (9) Docker (2)
 * 標籤
 * 排名
 * 系列
 * 訂閱
 * 關於


與 AI 共舞:我的 LEETCODE 刷題之道(上)準備篇

2024-10-24 心得

最近,我剛結束了 iThome 鐵人賽的寫作之旅——真是不輕鬆,但值得!

> 相關文章:Django Ninja 30:系列回顧與完賽心得

隨著比賽結束,我開始進入求職準備的第二階段——學習演算法(主要是 LeetCode 刷題)和系統設計。

老實說,我一直很排斥刷 LeetCode,因為感覺很「填鴨」,一點也不吸引人。

這可能是因為這件事和求職面試掛勾,所以讓人有壓力;又或者我還沒有真正領略資料結構與演算法之美。

總之,我很逃避!

--------------------------------------------------------------------------------

但這次不同了。

我找到了一個全新的方法,讓刷題不再那麼痛苦,還幫助我盡可能理解每一道題——這都要歸功於 AI。

我將分享如何透過 AI 輔助來提升刷 LeetCode 的學習效果。關鍵是——它讓原本枯燥的過程(對我來說)變得有趣。

當然,這樣的方法也有一些「限制」,後續會提及。

我將這個主題分成上、下兩篇,各有不同的著眼。

閱讀更多


DJANGO NINJA 30:系列回顧與完賽心得

2024-10-12 Django Ninja 系列

這是 Django Ninja 系列教學的第 30 篇。

系列最終章,我們的「Django Ninja 探險」將暫時告一段落。

這當然不是結束,畢竟 Django Ninja 還只是一個相對新的專案——我對它的未來充滿期待。

本文將分為兩個部分:

 1. 回顧整個系列,檢視我們在各章中學到的概念與技術——盡可能只提重點。
 2. 分享我在寫作過程中的最大挑戰、對 Django Ninja 的期待,最後則是我的鐵人賽完賽心得。

受限於篇幅,更多的幕後花絮、創作細節及個人心得,我將在與正賽無關的第 31、32 篇中,再行分享。

此外,我還會不定期更新「Django Ninja 番外篇」,補充正篇中未能詳述的內容。有興趣的讀者,歡迎訂閱本系列或本站 email。

話不多說,我們直接開始。

--------------------------------------------------------------------------------


一、系列目標與主要學習成果

回到第 1 篇的開頭,整個系列的目標是:

> 在這個 30 天的系列文章中,我們將詳細探討 Django Ninja 的基礎實作,透過文字教學與範例專案的程式碼,帶你一步一步熟悉這個強大而靈活的
> Django API 開發框架。

沒錯,而我們具體做了哪些事呢?


主要學習成果

透過本系列,讀者掌握了以下 Django Ninja 核心技能:

 1. 設定 Django Ninja 路由。(卷 7-8)
 2. 處理各種 HTTP 請求及參數——路徑參數、查詢參數、body。(卷 9-12)
 3. 使用 Schema 設計和定義 API 回應的資料結構。(卷 13-16)
 4. 從專案程式碼自動產生 API 文件、透過 Pydantic 驗證資料、有效處理系統拋出的錯誤。(卷 17-22)
 5. 靈活運用進階功能,包括檔案上傳、分頁和資料過濾。(卷 23-27)

還有最後的身分認證與單元測試。可說是一段相當完整的旅程。

閱讀更多


單元測試——使用 TEST CLIENT 與 PYTEST 測試 API

2024-10-11 Django Ninja 系列

這是 Django Ninja 系列教學的第 29 篇。

「請問你們的專案有單元測試嗎?」

面試中如果你提出這個問題,可能會讓面試官面有難色。

測試的重要性,大部分開發者都心知肚明。只是願意認真對待的人未必很多。

但如果真心想提高程式碼品質、減少 bug,讓專案更容易維護,那單元測試依舊是不可或缺的工具。

良好的測試不僅能幫助我們及早發現問題,還能在專案重構或新增功能時,確保現有的功能不會被破壞。

雖然寫測試會增加初期的開發時間,而且維護上也需要花費心力——這本來就不是一件輕鬆的事。但長期而言,它能為專案帶來持續的健全與穩定性。

所以,我們還是好好寫測試吧!

--------------------------------------------------------------------------------


本文大綱

這是整個系列中唯一一篇有全文大綱的教學。

原因是,本文要提及的事項較多,畢竟單元測試這麼大的主題,怎麼可能靠一篇 2500 字的文章說完。限於篇幅,無法一一詳談——但也不能直接省略。

所以需要有一個供讀者鳥瞰的全文輪廓,讓你更容易了解、吸收。大綱如下:

 1. 單元測試的理想與現實。
 2. Django API 測試重要概念說明。
    * Test Client 的意義與用途。
    * pytest 和 pytest-django 簡介。
    * pytest fixtures 與測試函式。
 3. 測試程式碼的實作與解說。
 4. 結語。

簡單來說,本文不會講解所有的程式碼改動,而是在必要時提及。其餘部分,由我直接實作並收錄在範例專案中,讓讀者自行參考。

在有限的篇幅中,帶你了解整體概念比關注細節更重要。當你掌握了基本概念,再去看程式碼會更加得心應手。

有關單元測試的更多討論,歡迎參考這篇心得〈《Python 工匠》筆記(二)對「單元測試」的看法與建議〉。這是一本立論紮實的好書,相信你會有所收獲。

本文所有的程式碼改動,可參考這個 PR。

閱讀更多


身分認證——SESSION 認證與全域設定

2024-10-10 Django Ninja 系列

這是 Django Ninja 系列教學的第 28 篇。

歡迎來到第七章!本章總共有兩篇內容:

 * 卷 28:身分認證——Session 認證與全域設定
 * 卷 29:單元測試——使用 Test Client 與 pytest 測試 API

這些主題的核心功能,並非由 Django Ninja 實作,但框架仍提供了一定程度的整合。並且,這些功能對於任何 Django 專案來說,都至關重要。

本文介紹幾乎所有 API 專案都需要的——身分認證(Authentication)。

我們將探討如何在 Django Ninja 中利用 Django 內建的 session-based
認證,實現完整的登入驗證功能,並進一步說明如何設定全域認證,以減少程式碼的重複。

本文所有的程式碼改動,可參考這個 PR。

--------------------------------------------------------------------------------


認證的兩個層次

進入實作前,我們要先了解,所謂的身分認證,究竟代表什麼。

以「帳號密碼 + session 認證」為例,身分認證的範圍主要涵蓋兩個階段。

首先,當使用者透過帳號密碼進行登入時,系統會檢查這些內容、確認身分合法。登入成功後,系統會將使用者資訊(比如用戶 id)儲存至 session,以維持登入狀態。

這是登入時的認證,也是我們最常說的認證。(狹義的認證)

接著,當使用者嘗試存取受「認證保護」的 API 時,系統會檢查 session 並確認身分,確保每個 API 請求都來自合法登入的使用者。

簡言之:

 * 第一階段:初次登入時的身分確認。
 * 第二階段:後續請求時的身分確認。

兩個層次相輔相成、一體兩面,確保服務能夠在使用者登入和後續操作中,提供適當的安全保障。

閱讀更多


資料查詢與過濾(下)FILTERSCHEMA 多欄位查詢

2024-10-09 Django Ninja 系列

這是 Django Ninja 系列教學的第 27 篇。

上篇中,我們學習了 Django ORM 的Q物件和 Django Ninja 的 FilterSchema,但後者感覺只學了一半。

討論比較多的是,view 函式中使用 FilterSchema 的參數定義方式——這確實很重要,但這只是 FilterSchema 的一部分。

本篇要來補完剩下的內容:

 1. 完善 FilterSchema:使用「更道地」的寫法,釋放 FilterSchema 真正的力量。
 2. 實作更進階的欄位查詢功能:多欄位查詢——篩選日期區間。
 3. 追加實作第 20 篇學到的「跨欄位驗證」:驗證查詢參數的日期區間是否合法。

看來又是資訊滿滿的一篇,話不多說,直接開始吧!

本文所有的程式碼變動,可參考這個 PR。

閱讀更多


資料查詢與過濾(上)FILTERSCHEMA 介紹

2024-10-08 Django Ninja 系列

這是 Django Ninja 系列教學的第 26 篇。

「查詢」是 API 中常見的附加需求,本質上是對資料的過濾(filtering)與篩選。

無論是篩選文章、商品,還是查詢用戶,根據不同條件來過濾資料並獲得結果,可說是大部分專案的必備功能。

在 view 函式中,實作查詢最簡單的方式,就是使用 Django ORM 的過濾方法。例如,我們可以用filter方法來根據特定條件篩選 QuerySet。

這種方法簡單直接,適合基本的查詢需求。然而,它也有其局限性——隨著欄位與需求的增加,查詢條件可能變得越來越複雜,導致程式碼冗長且難以維護。

為了解決這一問題,Django Ninja 提供了 FilterSchema,讓我們可以用更「結構化」的方式,定義並管理查詢條件。

本文將介紹 FilterSchema,一步步實作與講解,讓你了解如何在 Django Ninja 中使用 FilterSchema,實現更加靈活、模組化的
API 查詢功能。

本文所有的程式碼改動,可參考這個 PR。

閱讀更多


分頁(下)自定義分頁類別

2024-10-07 Django Ninja 系列

這是 Django Ninja 系列教學的第 25 篇。

上一篇我們介紹了 Django Ninja 的內建分頁器,並用它實作了簡單的分頁功能。

雖然內建的PageNumberPagination確實方便,但在很多時候,我們仍需要一些客製化功能。

為了實現這個目的,你需要自定義一個分頁類別。

不過別擔心,這種自定義,並非從零開始。而是繼承 Django Ninja 所提供的基礎分頁類別,再進行自己的「加工」。

這篇文章就要來教你怎麼做。

本文所有的程式碼變動,可參考這個 PR。

--------------------------------------------------------------------------------


客製化需求

除了基本的分頁,我們還希望能夠:

 * 允許客戶端選擇每頁顯示的資料數量,可選範圍限定在 1 至 100 之間。
 * 在回應中新增兩個欄位,顯示當前的分頁資訊:
   * 當前頁數(page)。
   * 每頁顯示數量(per_page)。

這無疑是很常見的需求。我們將透過自定義分頁類別,來實現這些功能。

話不多說,直接開始!

閱讀更多
下一頁
Powered by Hexo and Even ©2021 - 2024 Kyo Huang