use*_*546 5 django django-rest-framework
我正在使用Django REST Framework,我使用过滤器来过滤查询集.
http://www.django-rest-framework.org/api-guide/filtering/#filtering-against-query-parameters
像这样
http://example.com/api/products/4675/?category=clothing&max_price=10.00
但我已经看到,如果过滤器中有错误或查询参数不存在,那么它会显示所有非常糟糕的结果.
如果查询参数存在问题,我宁愿不想要结果,因为有时我不知道这是否有效
编辑
这是我的代码
class userFilter(django_filters.FilterSet):
strict = True
class Meta:
model = User
fields = ('is_active', 'is_archived', 'age')
Run Code Online (Sandbox Code Playgroud)
休息
class UserListCreateView(generics.ListCreateAPIView):
queryset = User.objects.filter(is_archived=False)
ordering_fields = ('is_active')
filter_class = userFilter
Run Code Online (Sandbox Code Playgroud)
这是REST设置
REST_FRAMEWORK = {
'DEFAULT_MODEL_SERIALIZER_CLASS':
'rest_framework.serializers.HyperlinkedModelSerializer',
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
'rest_framework.filters.SearchFilter',
'rest_framework.filters.OrderingFilter',
),
# 'PAGINATE_BY': 1,
'PAGINATE_BY_PARAM': 'page_size',
'MAX_PAGINATE_BY': 100,
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
)
}
Run Code Online (Sandbox Code Playgroud)
如果您使用DjangoFilterBackend,请查看严格的 Non-Meta 选项。
strict 选项控制当用户为任何筛选字段指定无效值时是否返回结果。默认情况下,strict 设置为 True,这意味着如果任何字段包含无效值,则返回空查询集。您可以通过将 strict 设置为 False 来放松此行为,这将有效地忽略过滤器字段(如果其值无效)。
过滤器:
from django_filters.filterset import FilterSet
class UserFilter(FilterSet):
strict = True
class Meta:
model = User
fields = ['username']
Run Code Online (Sandbox Code Playgroud)
设置:(假设您已经安装了django-filter)
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',)
}
Run Code Online (Sandbox Code Playgroud)
现在,如果有人这样做:
http://api.example.com/users/?username=myuser&badfilter=1
Run Code Online (Sandbox Code Playgroud)
...它将返回一个空列表,因为badfilter不存在。
由于FilterSet自动默认为strict=True,我有一种感觉,您没有利用DjangoFilterBackend.
| 归档时间: |
|
| 查看次数: |
2043 次 |
| 最近记录: |