2016-08-12 54 views
0

我正在用django rest框架開發REST API,但我沒有找到使用django過濾器驗證請求輸入的方法。DRF - 使用Django過濾器向開發人員反饋錯誤輸入的反饋

例如,說我有模式:

class Event(models.Model): 
    timestamp = models.DateTimeField(help_text="Time it was created") 
    is_important = models.BooleanField(help_text="If the event is important") 

和我有過濾器:

class EventFilter(filters.FilterSet): 
    important = filters.BooleanFilter(name='is_important') 
    since = filters.IsoDateTimeFilter(name='timestamp', lookup_type='gt') 

    class Meta: 
     model = Event 

如果在我的要求,我插入一個錯誤的日期一樣{URL}/?since = 2016-02-31T00:00Z{url} /?since =昨天,而不是接收有關請求錯誤的反饋,API只會返回一個沒有任何結果的列表。這並不表示開發者提出了錯誤的要求,這可能意味着在這些條款下沒有任何事件。

如果在我的請求中發送{url} /?is_important =也許,它會返回所有結果而不進行任何過濾。

所以,我的問題是:DRF是否有驗證這些輸入的方式,並向開發人員返回有意義的響應?謝謝。

回答

1

django-filter有一個strict屬性,它控制驗證錯誤的處理。

import django_filters as filters 
from django_filters.filterset import STRICTNESS 

class EventFilter(filters.FilterSet): 
    important = filters.BooleanFilter(name='is_important') 
    since = filters.IsoDateTimeFilter(name='timestamp', lookup_type='gt') 

    strict = STRICTNESS.RAISE_VALIDATION_ERROR 

    class Meta: 
     model = Event 
+0

它的工作原理,謝謝! –