django rest框架在驗證後對數據做了哪些轉換?是否只在可能的情況下將字符串解析爲int?數據和django rest框架中的驗證數據之間有什麼區別?
回答
反序列化
數據被輸入到串行 如
serializer = CommentSerializer(data={'email': 'foobar', 'content': 'baz'})
正如你所看到的電子郵件是無效的,所以下面的規則(官方docmentation)
申請反序列化數據時,您總是需要在之前調用is_valid()試圖訪問驗證的數據,或保存一個對象實例
serializer.is_valid()
如果你試圖反序列化data
有效#True
那麼你可以爲
serializer.validated_data
加成
訪問驗證數據驗證後沒有數據轉換,它只檢查您的數據是否有效,如果發生任何驗證錯誤,.errors
屬性將包含一個代表結果錯誤消息的字典。
一個很好的例子是,當你在做現場驗證
class CommentSerializer(serializers.Serializer):
title = serializers.CharField(max_length=100)
def validate_title(self, value):
if 'django' not in value.lower():
raise serializers.ValidationError("Title is not about Django")
return value
validate_title
會在每次調用.is_valid()
時候叫,你可以看到它只是檢查標題Django的關係,如果真值,在這種案例標題被返回,否則引發ValidationError。此處沒有數據變化
這並不回答這個問題。數據總是會與經過驗證的數據一樣? – user2080105
我編輯了我的答案。希望其明確@ user2080105 –
你有任何官方消息來源提到沒有轉型? – user2080105
您可以在CommentSerializer中自定義數據。validate_content方法:
這是您的串行:
class CommentSerializer(serializers.Serializer):
email=serializers.EmailField()
content=serializers.CharField()
def validate_content(self,value):
#If content is 'baz' returns 'foo'
if value and value == "baz":
return "foo"
return value
所以: 讓我們嘗試與錯誤的值(電子郵件)
>>> serializer = CommentSerializer(data={'email': 'foobar', 'content': 'baz'})
>>> serializer.data
Traceback (most recent call last):
raise AssertionError(msg)
AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
You should either call `.is_valid()` first, or access `.initial_data` instead.
>>> serializer.initial_data
{'content': 'baz', 'email': 'foobar'}
>>> serializer.validated_data
Traceback (most recent call last):
raise AssertionError(msg)
AssertionError: You must call `.is_valid()` before accessing `.validated_data`.
>>> serializer.is_valid()
False
>>> serializer.data
{'content': 'baz', 'email': 'foobar'}
>>> serializer.validated_data
{}
>>> serializer.errors
{'email': [u'Enter a valid email address.']}
現在讓我們嘗試用正確的值
>>> serializer2 = CommentSerializer(data={'email': '[email protected]', 'content': 'baz'})
>>> serializer2.is_valid()
True
>>> serializer2.initial_data
{'content': 'baz', 'email': 'foobar'}
>>> serializer2.errors
{}
>>> serializer2.data
{'content': u'foo', 'email': u'[email protected]'}
>>> serializer2.validated_data
OrderedDict([(u'email', u'[email protected]'), (u'content', u'foo')])
所以:
個- 數據:是一個字典,你可以看到它後,才is_valid()(你只能看到未驗證值)
- validated_data是OrderedDict你只能後is_valid看到它() & & is_valid()==真
- 1. 數據驗證和驗證有什麼區別?
- 2. 數據沿襲和數據來源之間有什麼區別?
- 3. MySQL數據庫中TABLE和VIEW之間有什麼區別?
- 4. HTML5 =元數據與微數據之間有什麼區別?
- 5. 春季板凳和數據訪問框架有什麼區別?
- 6. 輸入數據驗證時filter_var和filter_input之間的區別
- 7. Django的REST框架串行驗證字段數據類型
- 8. 深度數據和點雲之間有什麼區別?
- 9. 表單數據和請求負載之間有什麼區別?
- 10. 歷史學家和數據倉庫之間有什麼區別?
- 11. 數據結構Tree和Graph之間有什麼區別?
- 12. 「數據包」和「交易」之間有什麼區別?
- 13. 意圖額外和意圖數據之間有什麼區別?
- 14. .Net框架的版本v2.0.50727.3053和v2.0.50727.3074之間有什麼區別?
- 15. 何時以及如何使用Django REST框架驗證數據
- 16. JSON中的Django REST框架FileField數據
- 17. JavaScript框架和庫之間有什麼區別?
- 18. express框架「module.exports」和「exports」之間有什麼區別?
- 19. REST中的集合和商店之間有什麼區別?
- 20. jquery中的數據和數據類型有什麼區別?
- 21. 數據庫中的元數據和模式有什麼區別?
- 22. 中有什麼函數參數和參數之間......區別
- 23. dropbox,插入和數據存儲之間的區別是什麼
- 24. MediaFoundation RGB數據和BMP之間的區別究竟是什麼?
- 25. cl_datatype和通常數據類型之間的區別是什麼
- 26. 什麼是兩個語句之間的區別... context.getImageData()。數據和
- 27. TEXT和VARCHAR數據字段之間的區別是什麼?
- 28. R中的數據框和列表有什麼區別?
- 29. dataStore和數據庫有什麼區別?
- 30. 在html表格中框架屬性框和邊框之間有什麼區別
你的標題比內容不同的問題。這是什麼? – Linovia
你的問題有效地歸結爲「輸入和輸出之間有什麼區別?」 - 這太寬了 – Sayse
瞭解轉換導致瞭解細節的差異,它實際上是相同的問題 – user2080105