《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)