aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Melnikow2014-01-04 16:57:50 -0500
committerPaul Melnikow2014-01-04 16:57:50 -0500
commit3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18 (patch)
tree850fde84f1b288fcbf440f88f693a3eb7a1f9b80
parenta1d7aa8f712b659f9d8302a2d2a098d2538e6c89 (diff)
downloaddjango-rest-framework-3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18.tar.bz2
Router: Do not automatically adjust lookup_regex when trailing_slash is True
BREAKING CHANGE When trailing_slash is set to True, the router no longer will adjust the lookup regex to allow it to include periods. To simulate the old behavior, the programmer should specify `lookup_regex = '[^/]+'` on the viewset. https://github.com/tomchristie/django-rest-framework/pull/1328#issuecomment-31517099
-rw-r--r--docs/api-guide/routers.md2
-rw-r--r--rest_framework/routers.py7
-rw-r--r--rest_framework/tests/test_routers.py2
3 files changed, 4 insertions, 7 deletions
diff --git a/docs/api-guide/routers.md b/docs/api-guide/routers.md
index f3beabdd..6b4ae6db 100644
--- a/docs/api-guide/routers.md
+++ b/docs/api-guide/routers.md
@@ -83,7 +83,7 @@ This behavior can be modified by setting the `trailing_slash` argument to `False
Trailing slashes are conventional in Django, but are not used by default in some other frameworks such as Rails. Which style you choose to use is largely a matter of preference, although some javascript frameworks may expect a particular routing style.
-With `trailing_slash` set to True, the router will match lookup values containing any characters except slashes and dots. When set to False, dots are allowed. To restrict the lookup pattern, set the `lookup_field_regex` attribute on the viewset. For example, you can limit the lookup to valid UUIDs:
+The router will match lookup values containing any characters except slashes and period characters. For a more restrictive (or lenient) lookup pattern, set the `lookup_field_regex` attribute on the viewset. For example, you can limit the lookup to valid UUIDs:
class MyModelViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
lookup_field = 'my_model_id'
diff --git a/rest_framework/routers.py b/rest_framework/routers.py
index 8766ecb2..df1233fd 100644
--- a/rest_framework/routers.py
+++ b/rest_framework/routers.py
@@ -224,11 +224,8 @@ class SimpleRouter(BaseRouter):
try:
lookup_value = viewset.lookup_value_regex
except AttributeError:
- if self.trailing_slash:
- lookup_value = '[^/]+'
- else:
- # Don't consume `.json` style suffixes
- lookup_value = '[^/.]+'
+ # Don't consume `.json` style suffixes
+ lookup_value = '[^/.]+'
return base_regex.format(
lookup_prefix=lookup_prefix,
lookup_field=lookup_field,
diff --git a/rest_framework/tests/test_routers.py b/rest_framework/tests/test_routers.py
index 0f6d62c7..e41da57f 100644
--- a/rest_framework/tests/test_routers.py
+++ b/rest_framework/tests/test_routers.py
@@ -152,7 +152,7 @@ class TestTrailingSlashIncluded(TestCase):
self.urls = self.router.urls
def test_urls_have_trailing_slash_by_default(self):
- expected = ['^notes/$', '^notes/(?P<pk>[^/]+)/$']
+ expected = ['^notes/$', '^notes/(?P<pk>[^/.]+)/$']
for idx in range(len(expected)):
self.assertEqual(expected[idx], self.urls[idx].regex.pattern)