Django API 筆記
流程
- 建model, 自訂 migration 才能讓 raw data import 到 model database。
- 建立 model Manager() import model ,建立 view call manager 的 function,再 return response。
Model
- CASCADE: 刪除 model 時,會跟著關聯的model一起刪除
- related_name: 在 foreign key 設定 related_name 可以讓 models 使用, User.objects.get(id=1).purchaehistory.all()
- 為什麼 DateTimefield 設定 blank=True, null=True?
null = True, 允許字串是NULL。
blank = True , 允許表單輸入值是空的
Migrations
寫一個 load json data 的程式,將 json 資料轉成 python 物件,再呼叫 django models 物件,依照物件屬性儲存
。
QuerySet
一個 QuerySet 代表著資料庫的一個物件,執行 User.objects.all() ,會返回包含著在資料庫物件的 QuerySet 。
model.Manager 用法
給予 model 能操作資料庫。
在 BookStore 的模型,呼叫 BookStore.objects.all(), 就能呼叫出 BookStore 所有物件的資料。
自定義 Manager
自定義 Manager, 可以添加額外的 method, 俢改 Manager 返回的 QuerySet.
可以直接呼叫 Bookstore.objects.list()
example.
操作 django shell
Django view render
在 view.py 設定 import model 的資料,才能導到網頁上
Django CRUD
User_name_date_range_total_amount
用到 Django ORM 的功能
- objects.values(),return 每個在 table field 的 key, value
- objects.filter(),return 新的 queryset, 其中包含著 filter 的物件。
- 加總:annotate(Sum()), annotate 會return QuerySet 每個 objects.
- 排序、Limit: order_by()[:n]
Django Rest Framework
後端
在 Web 後端中,我們要先將 JSON objects, deserializer 才能 將 JSON 裡的資料做處理, 反之要將資料呈現給 client 端,就要將資料 serilaizer。
Django 本身沒有支援 GET, POST 這些 HTTP method,要透過 Django REST framwork。
Django Restframewrok 提供:
- Serializer
- Deserializer
- 與 Model 對應的 Data validator
update()
只能更新主 table, 不能更新 child table
model
因為 POST 時,可能不會每個資料欄位都 POST ,所以將 null, blank 設成 trul。foreign key(null=True, blank = True)。
Serializer
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Server-> serializer -> client
抓 Server 的 model 到 view 裡做 serializer 資料格式,讓 client 端可以透過 API 給 Server 需要的格式。
由於是從 Database Model 抓的 Object 所以不需要驗證資料的格式
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- partial = True, 允許部份資料更新, 像我們 POST 上去的資料,不可能每個欄位都 POST ,那就可以使用 partial =True,可以部份資料更新就好。
- require =False,可以允許 nested (JSON list) 為 None。
- many =True,可以處理 list 中的 objects 。