restful規範:前後端分離:前端乙個專案,後端乙個專案
1:通常使用https協議
2.網域名稱部署 api.baidu.com www.baidu.com/api
3.版本 www.baidu.com/api/v2 版本號放在請求頭中
4.路徑都是名詞(可以用複數)
5.根據不同的請求方式,執行不同的操作 delete刪除
put和patch操作都是冪等性操作
6.請求位址中攜帶過濾條件
7.狀態碼
8.錯誤資訊
9.響應的資料格式:
所有資料:列表
刪除資料:返回乙個空
10.返回的資料中攜帶連線
路由中配置 類名.as_view() 本質是乙個返回的函式位址
當有請求時:記憶體位址(request,其他參)
內部又呼叫的dispatch方法,通過反射,根據請求方式,執行不同方法
寫乙個類繼承serializer 在類中寫要序列化的字段
如name = serializers.charfield()
在view.py中使用book=bookserializer(book_list,many=true)(呼叫類進行序列化,序列化格式按照序列化類中字段指定的結果)
book.data 就是序列化後的資料
source的三種用法:1指定字段 2:指定方法 3:深度查詢(跨表)
serializermethodfield,必須配合方法使用get_欄位名(self,obj)obj是當前序列化的物件(應該是利用反射)
serializermethodfield對應的方法中還可以繼續使用其他的序列化類
3:rest-framework序列化之modelserializer
寫乙個類繼承modelserializer 在類內部寫:
class meta:
model = models.book
fields='__all__' 所有字段
exclude=['name',] 除什麼字段之外
depth=1 depth表示深度
重寫屬性
def validate_name(self,value):
if value.startswith('sb'):
#不能讓你過
raise validationerror('書名不能以sb開頭')
else:
return value
#全域性鉤子函式,對全域性字段進行校驗
# def validate(self,a):
# # print(a)
# name=a.get('name')
# price=a.get('price')
# if name != price:
# raise validationerror('錯了')
# else:
# return a
校驗資料在序列化類中校驗
book_ser=bookserializer(instance=book,many=false)
注意book:不是queryset物件,是book物件
5新增一本書
/books/傳送post請求,攜帶json格式資料
6.反序列化之區域性,全域性鉤子(序列化的類一定是繼承modelserializer的類)
def validate_name(self,value):
if value.startswith('sb'):
raise validationerror('書名不能以sb開頭')
else:
return value
全域性鉤子函式,對全域性字段進行校驗
def validate(self,a):
name = a.get('name')
price=a.get('price')
if name !=price:
raise vilidationerror('錯了)
else:
return a
drf序列化元件
1.rest framework序列化之serializer rest framework序列化之serializer步驟 1.建立乙個類,繼承serializer 2.在類中寫要序列化的字段 class bookserializer serializers.serializer 序列化表中的某幾個...
drf 序列化器
序列化器 和 django中 的 form 和 modelform 有類似的地方 因為 在 drf 中,沒有模板的概念,所以 序列化的主要作用 是對響應的資料做序列化的,還可以對 接收到的資料做序列化 serializer 序列化 查詢的結果queryset user.objects.all ser...
drf 序列化器
models.pyclass chargepolicydetail models.model purpose c models.apartment.purpose category c models.apartment.category name models.charfield max lengt...