《Django 5 By Example》閱讀筆記:p651-p678

codists發表於2024-11-19

《Django 5 By Example》學習第9天,p651-p678總結,總計28頁。

一、技術總結

1.aggregate()

(1)aggregate:ad-("to") + gregare("to collection into a flock(群), to gather")

因為ad 後面跟的是gregate,為了發音方便,ad演變為了ag。aggregate的本意是:vt. to combine into a single group(聚合, multiple things > single group)。

示例:The butterflies aggregate in dense groups(蝴蝶聚集在一起).

(2)資料庫裡面的annotate

aggregate()在資料庫裡面的含義是:aggregate refer to the process of summarizing or combining data from multiple row into a single result(multiple row > single result)。例如:SUM(),AVG(),COUNT(),MAX(),MIN()都稱為聚合函式。

示例:

SELECT AVG(price) FROM book;

(3) Django裡面的aggregate

示例:

# Average price across all books, provide default to be returned instead
# of None if no books exist.
>>> from django.db.models import Avg
>>> Book.objects.aggregate(Avg("price", default=0))
{'price__avg': 34.35}

2.annotate()

(1)annotate:ad-("to") + notare("to mark, to note")

因為ad 後面跟的是notare,為了發音方便,ad演變為了an。annotate的本意是:to add marks or notes to explain on sth(給.....作註解,給......加評註)。

(2)資料庫裡面的annotate

annotate()在資料庫裡面的含義是:annotate refers to adding supplementary information to queries or request.This can help provide context, make data more understandable, or enhance the the functionality of queries or results.

示例:

COMMENT ON COLUMN employees.salary IS 'Employee annual salary';

(3)Django裡面的annotate

Django裡面的annotate()函式的作用是:Annotates each object in the QuerySet with the provided list of query expressions(使用已提供的query expressions 對 QuerySet 中的每個物件進行註解。新增註解的結果是QuerySet中的每個objec會多一個欄位)。

示例:

# Build an annotated queryset
>>> from django.db.models import Count
>>> q = Book.objects.annotate(Count("authors"))
# Interrogate the first object in the queryset
>>> q[0]
<Book: The Definitive Guide to Django>
>>> q[0].authors__count
2
# Interrogate the second object in the queryset
>>> q[1]
<Book: Practical Django Projects>
>>> q[1].authors__count
1

3.DRF serializer

(1)定義

p648, Serializer: Provides serialization for normal Python class instances。

(2)分類

Serializer又細分為Serializer, ModelSerializer, HyperlinkedModelSerializer.

(3)Field

IntegerField(),SerializerMethodField(),StringRelatedField()。

(4)nested serializer

nested serializer 可用於替代 StringRelatedField()。

4.DRF 分頁

DRF使用PageNumberPagination 進行分頁。

5.DRF authentication

(1)BasicAuthentication

(2)TokenAuthentication

(3)SessionAuthentication

(4)RemoteUserAuthentication

又提到了認證,我快要暈了,差不多每個專案都搞一次認證,能抽象出來做一個整體的介紹不?畢竟認證這塊在實際專案中並不會變動那麼大,真沒必要花那麼多章節來介紹認證的。

二、英語總結(生詞:0)

無。

三、其它

(1)json_pp

curl http://127.0.0.1:8000/api/subjects/ | json_pp

不知道為什麼,感覺國外的的作者特別喜歡使用curl,本人上次看到還是curl結合jq使用,這次是curl結合json_pp使用,在postman和命令列之間反覆跳。可能是postman輸入地址太麻煩?

重新梳理了下aggregate()、annotate()等函式的含義及用法,之前學得太糙了,不夠細,慢慢的就忘掉了它的用法。

chapter 15簡評:以線上學習平臺為例,介紹瞭如何在Django專案中整合django-rest-framework。這個學習平臺的介紹又是在前面幾章,感覺排版很不合理,如果都是一個專案的話最好還是用一整個章節來介紹比較好。同時既然都使用了django-rest-framework了,咋不整一個前端框架呢?

四、參考資料

1. 程式設計

(1) Antonio Melé,《Django 5 By Example》:https://book.douban.com/subject/37007362/

2. 英語

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

歡迎搜尋及關注:程式設計人(a_codists)

相關文章