Python 如何在django rest框架中不敏感地匹配url大小写?
我在aPython 如何在django rest框架中不敏感地匹配url大小写?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我在aurl.py中有这一行 url(r'^(?i)(?P<datasource>[a-z]+)/$', views.OdbcConfigDatasourceDetail.as_view()), url(r'^(?i)(?P[a-z]+)/$”,views.odbcconfiguredatasourcedetail.as_view(), (?i)应该使regex不区分大小写。我怀疑它实际上是在不敏感地搜索大小写,但它正在传递带有完整大小写的命名组datasource,这会导致查找
url.py中有这一行
url(r'^(?i)(?P<datasource>[a-z]+)/$', views.OdbcConfigDatasourceDetail.as_view()),
url(r'^(?i)(?P[a-z]+)/$”,views.odbcconfiguredatasourcedetail.as_view(),
(?i)
应该使regex不区分大小写。我怀疑它实际上是在不敏感地搜索大小写,但它正在传递带有完整大小写的命名组datasource
,这会导致查找失败
如何在传递命名组或查找字段之前将其小写?我使用(优秀的)Django Rest框架文档,特别是
例如,如果需要根据URL配置中的多个字段查找对象,可以创建一个mixin类,如下所示:
class MultipleFieldLookupMixin(object):
"""
Apply this mixin to any view or viewset to get multiple field filtering
based on a `lookup_fields` attribute, instead of the default single field filtering.
"""
def get_object(self):
queryset = self.get_queryset() # Get the base queryset
queryset = self.filter_queryset(queryset) # Apply any filter backends
filter = {}
for field in self.lookup_fields:
if self.kwargs[field]: # Ignore empty fields.
filter[field] = self.kwargs[field]
return get_object_or_404(queryset, **filter) # Lookup the object
然后,只要在需要应用自定义行为的任何时候将此mixin应用于视图或视图集即可
class RetrieveUserView(MultipleFieldLookupMixin, generics.RetrieveAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
lookup_fields = ('account', 'username')
我将此代码添加到我的项目中
class CaseInsensitiveLookupMixin(object):
"""
Stole majority of this mixin
from http://www.django-rest-framework.org/api-guide/generic-views/
"""
def get_object(self):
queryset = self.get_queryset() # Get the base queryset
queryset = self.filter_queryset(queryset) # Apply any filter backends
filter = {self.lookup_field: self.kwargs[self.lookup_field].lower()}
return get_object_or_404(queryset, **filter) # Lookup the object
必须将django.jettcuts import get_object_或_404
添加到该文件的顶部,并将详细视图更改为类OdbcConfigDatasourceDetail(CaseInsensitiveLookupMixin,generics.RetrieveUpdatedStroyapiew):
DRF团队优秀文档的道具。在您看来,您可以使用类似datasource=datasource.lower()@Jingo的东西,它给我一个NameError
NameError:name'datasource'未定义
。视图本身是派生的类OdbcConfigDatasourceDetail(generics.RetrieveUpdateStroyapView):
。