Django ORM:一對一、一對多外鍵教學(下)關聯查詢

Let's Django!

這是 Django Tutorial 的第 7 篇、Django ORM 外鍵教學的第 3 篇——完結篇。

範例程式碼可參考我的 GitHub 專案,更多教學請見「Django 文章總覽」。

系列:Django ORM 外鍵教學

  1. Django ORM:一對一、一對多外鍵教學(上)前言與關聯設定
  2. Django ORM:一對一、一對多外鍵教學(中)反向關聯
  3. Django ORM:一對一、一對多外鍵教學(下)關聯查詢

經過前 2 篇的鋪墊,我們可以真正開始感受,使用 ORM 來查詢 db 關聯物件的方便與直觀之美。

開始前,我們要先匯入範例資料,方式請參考〈用 Django Fixture 匯入與導出資料〉介紹的 Django fixture 與資料內容。

打開範例專案,cd 至專案根目錄,並使用指令:

1
python manage.py loaddata post_data.json

好,現在我們的 db 已經有資料了。

如果你已經不記得具體有哪些 table、它們代表什麼,可參考第一篇的模型介紹,以及第二篇對模型架構的調整,或直接觀看 models.py 原始碼。

本文主旨

本文只專注介紹 Django ORM 中的外鍵關聯查詢

畢竟 Django ORM 的查詢語法實在太多了,很多時候都要回去看文件。

而其中關聯查詢特別常用,值得我們專門學習,熟練掌握。

現代軟體的「鍵盤快捷鍵」記憶爭奪戰

by Sam Chivers

現代人每天都會用一堆軟體、app、線上服務。

其中比較複雜的工具(包括瀏覽器與作業系統),往往都有搭配「鍵盤快捷鍵」來加速你的操作。

然而,軟體很多,快捷鍵更多!究竟哪些要記、哪些可以放棄,才能降低大腦的負擔?

本文簡要分享我的看法。

本文所謂的快捷鍵

首先說明,像ctrl+Cctrl+Vctrl+Bctrl+S這些,已成為大家心中公認的快捷鍵設定,各大軟體廠商也幾乎不可能在設計上違背的,就不再討論範圍。

這裡講的是那些不同軟體之間特有的快捷鍵。而且也不是要討論這些快捷鍵的設計是否合理、好記。

而是要說,我如何選擇(取捨)要記得哪些、放棄哪些的思路,以及我對「記憶快捷鍵來增加效率(生產力)」的整體看法。

只是簡單的個人心得,供參。

用 Django Fixture 匯入與導出資料

Let's Django!

這是 Django Tutorial 的第 6 篇。

範例程式碼可參考我的 GitHub 專案,更多教學請見「Django 文章總覽」。

本文相關的程式碼改動,都集中在這個 PR


本文可視為 Django ORM 外鍵教學第三部分——查詢篇——的前置教學,因為我們需要一些範例資料作為查詢的標的。

為了快速且輕鬆地建立這些範例,我們要善用 Django fixture。

本文介紹 Django fixture 的基本用法,並以 Django-Tutorial 的範例資料為例,示範如何導出與匯入 fixture。

什麼是 Django Fixture

Django fixture 是一種用來管理資料庫數據的工具。

它允許你以 JSON 或 XML 等格式將資料庫中的數據導出(序列化)到特定文件中,並在需要時將這些數據匯入到資料庫。

你可以輕鬆地透過 Django fixture 初始化資料庫內容,設置測試數據,或者在不同環境間傳輸數據。

顯然的,它也很適合用來「快速建立」(或說匯入)我文章教學所需要的資料。

更多細節與介紹,可參考 Django 文件

《Effective Python》筆記(一)以拆分代替索引

Effective Python 中文版

這是《Effective Python 中文版|寫出良好 Python 程式的 90 個具體做法》筆記的第 1 篇,你可以當作是一則重點整理,加上我個人的開發經驗與心得。

毫無疑問,這又是一本關於「Clean Code in Python」的書——而且很可能是評價最高的一本。

本書由 90 個具體做法所組成,搭配大量實例,助你寫出更 Pythonic 的程式碼。

內容有初階也有進階(比如 metaclass),我會挑選書中我認為「重要且實用」的部分作為分享準則。簡言之,不會太深——但很可能是常常被忽略或低估的部分。

本文整理自書中的「做法 6:優先選用多重指定的拆分而非索引」。

附帶一提,作者已經把書中的程式碼範例都放在 effectivepython 這個 repo,這對於我這種要寫筆記、心得文章的人,真是再方便不過。


本文主旨

本文的主旨只有一個:試圖說服你,不要在程式碼中使用索引取值——盡可能改用拆分(unpacking)來代替索引。

這裡的索引取值,指的是像items[2]這樣,以序列(sequence)的數字索引來取值的情況。

如果程式碼只有你一個人撰寫與維護,且日後也是如此,或許未必要堅持這個原則。

但如果涉及多人協作,未來還有交接與維護需求,那麼避免索引取值,肯定能提升程式的可讀性,同時更容易維護。

31,打造新版「熱門文章排名」

建立這個 blog 後不知多久,我在網站選單新增了「熱門文章排名」頁面。你目前看到的是新版。

收錄「一段時間內」瀏覽量排名前 10 名的文章,供讀者參考。順便增加全站頁面的總觸及率。

畢竟作為一個 blogger,誰不希望讀者在我們的 blog 看完一篇又一篇呢?


如何讓新讀者看更多?

如何讓讀者願意「多看」,無疑是重要議題。

大部分部落格的大部分文章,都是靠特定 SEO 關鍵字,吸引到新讀者的第一次瀏覽。

在讀者還不認識你之前,眼下的這篇文章,就是他 / 她決定是否再瞧瞧其它文章的主要依據。

如果內容寫的有趣、論述風格對了胃口、相關的議題剛好是讀者現在關心的,就有機會獲得第二篇、第三篇瀏覽——這是作者們所期待的。

不過這些都是讀者的主觀因素!除了文章內容外,我們幾乎無法控制。

那我們可以做什麼?

Django REST framework 教學(二)基本設定與路由

Let's Django!

這是 Django Tutorial 的第 5 篇、DRF 系列的第 2 篇。

範例程式碼可參考我的 GitHub 專案,更多教學請見「Django 文章總覽」。

本文相關的程式碼改動,都集中在這個 PR


上一篇我們介紹了 Django 和 Django REST framework(以下簡稱 DRF)之間的區別,與它們各司其職的角色定位。

兩者相輔相成,讓 Django 在這個「前後端分離」的時代,還能佔有一席之地。

接下來,我們要開始動手實作 API。

系列:Django REST framework 教學

本文主旨

本文的目標:建立一個 Django API,並確保它正常運行。

為了達到這個目標,我們需要完成以下三件事:

  1. 安裝 Django REST framework 套件。
  2. 設定 Django 的settings.py,加入 DRF 相關內容。
  3. 實作第一個路由(router)與 API。

就這麼簡單,讓我們直接開始吧!

30,如何持續寫作——Part 3

你寫作嗎?

我一直覺得,持續寫作真的很不容易!

所以我們需要一些方法或看法,來增加持續的可能性、降低其中的門檻。

在過去的文章中,我曾兩次討論「持續寫作」這個議題。本文將整理從上一次到現在,我的 3 個新想法。

回顧 Part 1、Part 2

前兩次討論,其實都只是某篇文章的一個段落,分別是:

  1. 小結:如何盡可能持續寫?(2021 年)
  2. 如何持續寫作 Part 2(2022 年)

它們代表了我不同時期的看法,不過都是一脈相承的,後者往往是對前者的追加、補充或是具體化。

本文也是如此,我會提出新想法,也會對過去的看法提出更加具體的建議。

純個人見解!但保證都是我的肺腑之言。讓我們開始。