mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-29 01:20:02 +03:00
used path and re_path for urls
This commit is contained in:
parent
8c4e83c5df
commit
c436b8ab00
|
@ -11,11 +11,15 @@ your API requires authentication:
|
||||||
|
|
||||||
You should make sure your authentication settings include `SessionAuthentication`.
|
You should make sure your authentication settings include `SessionAuthentication`.
|
||||||
"""
|
"""
|
||||||
from django.conf.urls import url
|
from django.urls import path
|
||||||
from django.contrib.auth import views
|
from django.contrib.auth import views
|
||||||
|
|
||||||
app_name = 'rest_framework'
|
app_name = 'rest_framework'
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^login/$', views.LoginView.as_view(template_name='rest_framework/login.html'), name='login'),
|
path(
|
||||||
url(r'^logout/$', views.LogoutView.as_view(), name='logout'),
|
'login/',
|
||||||
|
views.LoginView.as_view(template_name='rest_framework/login.html'),
|
||||||
|
name='login'
|
||||||
|
),
|
||||||
|
path('logout/', views.LogoutView.as_view(), name='logout'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,11 +2,10 @@ import warnings
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.conf.urls import include, url
|
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
from django.urls import resolve, reverse
|
from django.urls import resolve, reverse, include, path
|
||||||
|
|
||||||
from rest_framework import (
|
from rest_framework import (
|
||||||
RemovedInDRF311Warning, permissions, serializers, viewsets
|
RemovedInDRF311Warning, permissions, serializers, viewsets
|
||||||
|
@ -122,7 +121,7 @@ class TestSimpleRouter(URLPatternsTestCase, TestCase):
|
||||||
router.register('basics', BasicViewSet, basename='basic')
|
router.register('basics', BasicViewSet, basename='basic')
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^api/', include(router.urls)),
|
path('api/', include(router.urls)),
|
||||||
]
|
]
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -167,8 +166,13 @@ class TestSimpleRouter(URLPatternsTestCase, TestCase):
|
||||||
|
|
||||||
class TestRootView(URLPatternsTestCase, TestCase):
|
class TestRootView(URLPatternsTestCase, TestCase):
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^non-namespaced/', include(namespaced_router.urls)),
|
path('non-namespaced/', include(namespaced_router.urls)),
|
||||||
url(r'^namespaced/', include((namespaced_router.urls, 'namespaced'), namespace='namespaced')),
|
path(
|
||||||
|
'namespaced/',
|
||||||
|
include(
|
||||||
|
(namespaced_router.urls, 'namespaced'),
|
||||||
|
namespace='namespaced')
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
def test_retrieve_namespaced_root(self):
|
def test_retrieve_namespaced_root(self):
|
||||||
|
@ -185,8 +189,8 @@ class TestCustomLookupFields(URLPatternsTestCase, TestCase):
|
||||||
Ensure that custom lookup fields are correctly routed.
|
Ensure that custom lookup fields are correctly routed.
|
||||||
"""
|
"""
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^example/', include(notes_router.urls)),
|
path('example/', include(notes_router.urls)),
|
||||||
url(r'^example2/', include(kwarged_notes_router.urls)),
|
path('example2/', include(kwarged_notes_router.urls)),
|
||||||
]
|
]
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -243,8 +247,8 @@ class TestLookupUrlKwargs(URLPatternsTestCase, TestCase):
|
||||||
Setup a deep lookup_field, but map it to a simple URL kwarg.
|
Setup a deep lookup_field, but map it to a simple URL kwarg.
|
||||||
"""
|
"""
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^example/', include(notes_router.urls)),
|
path('example/', include(notes_router.urls)),
|
||||||
url(r'^example2/', include(kwarged_notes_router.urls)),
|
path('example2/', include(kwarged_notes_router.urls)),
|
||||||
]
|
]
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.urls import path
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
|
@ -47,10 +47,10 @@ def post_view(request):
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^view/$', view),
|
path('view/', view),
|
||||||
url(r'^session-view/$', session_view),
|
path('session-view/', session_view),
|
||||||
url(r'^redirect-view/$', redirect_view),
|
path('redirect-view/', redirect_view),
|
||||||
url(r'^post-view/$', post_view)
|
path('post-view/', post_view)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ class TestAPIRequestFactory(TestCase):
|
||||||
|
|
||||||
class TestUrlPatternTestCase(URLPatternsTestCase):
|
class TestUrlPatternTestCase(URLPatternsTestCase):
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', view),
|
path('', view),
|
||||||
]
|
]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import unittest
|
import unittest
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
from django.conf.urls import include, url
|
from django.urls import include, path, re_path, include, Resolver404
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.urls import Resolver404
|
|
||||||
|
|
||||||
from rest_framework.compat import make_url_resolver, path, re_path
|
from rest_framework.compat import make_url_resolver,
|
||||||
from rest_framework.test import APIRequestFactory
|
from rest_framework.test import APIRequestFactory
|
||||||
from rest_framework.urlpatterns import format_suffix_patterns
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
|
||||||
|
@ -62,7 +61,7 @@ class FormatSuffixTests(TestCase):
|
||||||
|
|
||||||
def test_trailing_slash(self):
|
def test_trailing_slash(self):
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^test/$', dummy_view),
|
path('test/', dummy_view),
|
||||||
]
|
]
|
||||||
self._test_trailing_slash(urlpatterns)
|
self._test_trailing_slash(urlpatterns)
|
||||||
|
|
||||||
|
@ -83,7 +82,7 @@ class FormatSuffixTests(TestCase):
|
||||||
|
|
||||||
def test_format_suffix(self):
|
def test_format_suffix(self):
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^test$', dummy_view),
|
path('test/', dummy_view),
|
||||||
]
|
]
|
||||||
self._test_format_suffix(urlpatterns)
|
self._test_format_suffix(urlpatterns)
|
||||||
|
|
||||||
|
@ -120,7 +119,7 @@ class FormatSuffixTests(TestCase):
|
||||||
|
|
||||||
def test_default_args(self):
|
def test_default_args(self):
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^test$', dummy_view, {'foo': 'bar'}),
|
path('test/', dummy_view, {'foo': 'bar'}),
|
||||||
]
|
]
|
||||||
self._test_default_args(urlpatterns)
|
self._test_default_args(urlpatterns)
|
||||||
|
|
||||||
|
@ -141,10 +140,10 @@ class FormatSuffixTests(TestCase):
|
||||||
|
|
||||||
def test_included_urls(self):
|
def test_included_urls(self):
|
||||||
nested_patterns = [
|
nested_patterns = [
|
||||||
url(r'^path$', dummy_view)
|
path('path/', dummy_view)
|
||||||
]
|
]
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^test/', include(nested_patterns), {'foo': 'bar'}),
|
path('test/', include(nested_patterns), {'foo': 'bar'}),
|
||||||
]
|
]
|
||||||
self._test_included_urls(urlpatterns)
|
self._test_included_urls(urlpatterns)
|
||||||
|
|
||||||
|
@ -164,7 +163,7 @@ class FormatSuffixTests(TestCase):
|
||||||
path('path', dummy_view)
|
path('path', dummy_view)
|
||||||
]
|
]
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url('^test/', include(nested_patterns), {'foo': 'bar'}),
|
path('test/', include(nested_patterns), {'foo': 'bar'}),
|
||||||
]
|
]
|
||||||
self._test_included_urls(urlpatterns)
|
self._test_included_urls(urlpatterns)
|
||||||
|
|
||||||
|
@ -172,11 +171,17 @@ class FormatSuffixTests(TestCase):
|
||||||
def test_included_urls_django2_mixed_args(self):
|
def test_included_urls_django2_mixed_args(self):
|
||||||
nested_patterns = [
|
nested_patterns = [
|
||||||
path('path/<int:child>', dummy_view),
|
path('path/<int:child>', dummy_view),
|
||||||
url('^url/(?P<child>[0-9]+)$', dummy_view)
|
re_path('^url/(?P<child>[0-9]+)$', dummy_view)
|
||||||
]
|
]
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url('^purl/(?P<parent>[0-9]+)/', include(nested_patterns), {'foo': 'bar'}),
|
re_path(
|
||||||
path('ppath/<int:parent>/', include(nested_patterns), {'foo': 'bar'}),
|
'^purl/(?P<parent>[0-9]+)/',
|
||||||
|
include(nested_patterns),
|
||||||
|
{'foo': 'bar'}),
|
||||||
|
path(
|
||||||
|
'ppath/<int:parent>/',
|
||||||
|
include(nested_patterns),
|
||||||
|
{'foo': 'bar'}),
|
||||||
]
|
]
|
||||||
test_paths = [
|
test_paths = [
|
||||||
# parent url() nesting child path()
|
# parent url() nesting child path()
|
||||||
|
@ -212,7 +217,7 @@ class FormatSuffixTests(TestCase):
|
||||||
|
|
||||||
def test_allowed_formats(self):
|
def test_allowed_formats(self):
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url('^test$', dummy_view),
|
path('test/', dummy_view),
|
||||||
]
|
]
|
||||||
self._test_allowed_formats(urlpatterns)
|
self._test_allowed_formats(urlpatterns)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.urls import path, re_path
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
|
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
@ -64,12 +64,17 @@ class ResourceViewSet(ModelViewSet):
|
||||||
router = SimpleRouter()
|
router = SimpleRouter()
|
||||||
router.register(r'resources', ResourceViewSet)
|
router.register(r'resources', ResourceViewSet)
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', Root.as_view()),
|
path('', Root.as_view()),
|
||||||
url(r'^resource/$', ResourceRoot.as_view()),
|
path('resource/', ResourceRoot.as_view()),
|
||||||
url(r'^resource/customname$', CustomNameResourceInstance.as_view()),
|
path('resource/customname/', CustomNameResourceInstance.as_view()),
|
||||||
url(r'^resource/(?P<key>[0-9]+)$', ResourceInstance.as_view()),
|
re_path(
|
||||||
url(r'^resource/(?P<key>[0-9]+)/$', NestedResourceRoot.as_view()),
|
r'^resource/(?P<key>[0-9]+)$',
|
||||||
url(r'^resource/(?P<key>[0-9]+)/(?P<other>[A-Za-z]+)$', NestedResourceInstance.as_view()),
|
ResourceInstance.as_view()),
|
||||||
|
re_path(r'^resource/(?P<key>[0-9]+)/$', NestedResourceRoot.as_view()),
|
||||||
|
re_path(
|
||||||
|
r'^resource/(?P<key>[0-9]+)/(?P<other>[A-Za-z]+)$',
|
||||||
|
NestedResourceInstance.as_view()
|
||||||
|
),
|
||||||
]
|
]
|
||||||
urlpatterns += router.urls
|
urlpatterns += router.urls
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
from django.conf.urls import include, url
|
from django.urls import include, path, re_path
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from rest_framework import serializers, status, versioning
|
from rest_framework import serializers, status, versioning
|
||||||
|
@ -101,7 +101,8 @@ class TestRequestVersion:
|
||||||
scheme = versioning.AcceptHeaderVersioning
|
scheme = versioning.AcceptHeaderVersioning
|
||||||
view = RequestVersionView.as_view(versioning_class=scheme)
|
view = RequestVersionView.as_view(versioning_class=scheme)
|
||||||
|
|
||||||
request = factory.get('/endpoint/', HTTP_ACCEPT='application/json; version=1.2.3')
|
request = factory.get(
|
||||||
|
'/endpoint/', HTTP_ACCEPT='application/json; version=1.2.3')
|
||||||
response = view(request)
|
response = view(request)
|
||||||
assert response.data == {'version': '1.2.3'}
|
assert response.data == {'version': '1.2.3'}
|
||||||
|
|
||||||
|
@ -144,14 +145,20 @@ class TestRequestVersion:
|
||||||
|
|
||||||
class TestURLReversing(URLPatternsTestCase, APITestCase):
|
class TestURLReversing(URLPatternsTestCase, APITestCase):
|
||||||
included = [
|
included = [
|
||||||
url(r'^namespaced/$', dummy_view, name='another'),
|
path('namespaced/', dummy_view, name='another'),
|
||||||
url(r'^example/(?P<pk>\d+)/$', dummy_pk_view, name='example-detail')
|
re_path(
|
||||||
|
r'^example/(?P<pk>\d+)/$',
|
||||||
|
dummy_pk_view,
|
||||||
|
name='example-detail')
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^v1/', include((included, 'v1'), namespace='v1')),
|
path('v1/', include((included, 'v1'), namespace='v1')),
|
||||||
url(r'^another/$', dummy_view, name='another'),
|
path('another/', dummy_view, name='another'),
|
||||||
url(r'^(?P<version>[v1|v2]+)/another/$', dummy_view, name='another'),
|
re_path(
|
||||||
|
r'^(?P<version>[v1|v2]+)/another/$',
|
||||||
|
dummy_view,
|
||||||
|
name='another'),
|
||||||
]
|
]
|
||||||
|
|
||||||
def test_reverse_unversioned(self):
|
def test_reverse_unversioned(self):
|
||||||
|
@ -167,7 +174,8 @@ class TestURLReversing(URLPatternsTestCase, APITestCase):
|
||||||
|
|
||||||
request = factory.get('/endpoint/?version=v1')
|
request = factory.get('/endpoint/?version=v1')
|
||||||
response = view(request)
|
response = view(request)
|
||||||
assert response.data == {'url': 'http://testserver/another/?version=v1'}
|
assert response.data == {
|
||||||
|
'url': 'http://testserver/another/?version=v1'}
|
||||||
|
|
||||||
request = factory.get('/endpoint/')
|
request = factory.get('/endpoint/')
|
||||||
response = view(request)
|
response = view(request)
|
||||||
|
@ -237,7 +245,8 @@ class TestInvalidVersion:
|
||||||
scheme = versioning.AcceptHeaderVersioning
|
scheme = versioning.AcceptHeaderVersioning
|
||||||
view = AllowedVersionsView.as_view(versioning_class=scheme)
|
view = AllowedVersionsView.as_view(versioning_class=scheme)
|
||||||
|
|
||||||
request = factory.get('/endpoint/', HTTP_ACCEPT='application/json; version=v3')
|
request = factory.get(
|
||||||
|
'/endpoint/', HTTP_ACCEPT='application/json; version=v3')
|
||||||
response = view(request)
|
response = view(request)
|
||||||
assert response.status_code == status.HTTP_406_NOT_ACCEPTABLE
|
assert response.status_code == status.HTTP_406_NOT_ACCEPTABLE
|
||||||
|
|
||||||
|
@ -300,7 +309,8 @@ class TestAllowedAndDefaultVersion:
|
||||||
|
|
||||||
def test_missing_with_default_and_none_allowed(self):
|
def test_missing_with_default_and_none_allowed(self):
|
||||||
scheme = versioning.AcceptHeaderVersioning
|
scheme = versioning.AcceptHeaderVersioning
|
||||||
view = AllowedWithNoneAndDefaultVersionsView.as_view(versioning_class=scheme)
|
view = AllowedWithNoneAndDefaultVersionsView.as_view(
|
||||||
|
versioning_class=scheme)
|
||||||
|
|
||||||
request = factory.get('/endpoint/', HTTP_ACCEPT='application/json')
|
request = factory.get('/endpoint/', HTTP_ACCEPT='application/json')
|
||||||
response = view(request)
|
response = view(request)
|
||||||
|
@ -310,12 +320,15 @@ class TestAllowedAndDefaultVersion:
|
||||||
|
|
||||||
class TestHyperlinkedRelatedField(URLPatternsTestCase, APITestCase):
|
class TestHyperlinkedRelatedField(URLPatternsTestCase, APITestCase):
|
||||||
included = [
|
included = [
|
||||||
url(r'^namespaced/(?P<pk>\d+)/$', dummy_pk_view, name='namespaced'),
|
re_path(
|
||||||
|
r'^namespaced/(?P<pk>\d+)/$',
|
||||||
|
dummy_pk_view,
|
||||||
|
name='namespaced'),
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^v1/', include((included, 'v1'), namespace='v1')),
|
path('v1/', include((included, 'v1'), namespace='v1')),
|
||||||
url(r'^v2/', include((included, 'v2'), namespace='v2'))
|
path('v2/', include((included, 'v2'), namespace='v2'))
|
||||||
]
|
]
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -342,17 +355,25 @@ class TestHyperlinkedRelatedField(URLPatternsTestCase, APITestCase):
|
||||||
|
|
||||||
class TestNamespaceVersioningHyperlinkedRelatedFieldScheme(URLPatternsTestCase, APITestCase):
|
class TestNamespaceVersioningHyperlinkedRelatedFieldScheme(URLPatternsTestCase, APITestCase):
|
||||||
nested = [
|
nested = [
|
||||||
url(r'^namespaced/(?P<pk>\d+)/$', dummy_pk_view, name='nested'),
|
re_path(r'^namespaced/(?P<pk>\d+)/$', dummy_pk_view, name='nested'),
|
||||||
]
|
]
|
||||||
included = [
|
included = [
|
||||||
url(r'^namespaced/(?P<pk>\d+)/$', dummy_pk_view, name='namespaced'),
|
re_path(
|
||||||
url(r'^nested/', include((nested, 'nested-namespace'), namespace='nested-namespace'))
|
r'^namespaced/(?P<pk>\d+)/$',
|
||||||
|
dummy_pk_view,
|
||||||
|
name='namespaced'),
|
||||||
|
path(
|
||||||
|
'nested/',
|
||||||
|
include(
|
||||||
|
(nested, 'nested-namespace'),
|
||||||
|
namespace='nested-namespace')
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^v1/', include((included, 'restframeworkv1'), namespace='v1')),
|
path('v1/', include((included, 'restframeworkv1'), namespace='v1')),
|
||||||
url(r'^v2/', include((included, 'restframeworkv2'), namespace='v2')),
|
path('v2/', include((included, 'restframeworkv2'), namespace='v2')),
|
||||||
url(r'^non-api/(?P<pk>\d+)/$', dummy_pk_view, name='non-api-view')
|
re_path(r'^non-api/(?P<pk>\d+)/$', dummy_pk_view, name='non-api-view')
|
||||||
]
|
]
|
||||||
|
|
||||||
def _create_field(self, view_name, version):
|
def _create_field(self, view_name, version):
|
||||||
|
@ -368,22 +389,27 @@ class TestNamespaceVersioningHyperlinkedRelatedFieldScheme(URLPatternsTestCase,
|
||||||
|
|
||||||
def test_api_url_is_properly_reversed_with_v1(self):
|
def test_api_url_is_properly_reversed_with_v1(self):
|
||||||
field = self._create_field('namespaced', 'v1')
|
field = self._create_field('namespaced', 'v1')
|
||||||
assert field.to_representation(PKOnlyObject(3)) == 'http://testserver/v1/namespaced/3/'
|
assert field.to_representation(PKOnlyObject(
|
||||||
|
3)) == 'http://testserver/v1/namespaced/3/'
|
||||||
|
|
||||||
def test_api_url_is_properly_reversed_with_v2(self):
|
def test_api_url_is_properly_reversed_with_v2(self):
|
||||||
field = self._create_field('namespaced', 'v2')
|
field = self._create_field('namespaced', 'v2')
|
||||||
assert field.to_representation(PKOnlyObject(5)) == 'http://testserver/v2/namespaced/5/'
|
assert field.to_representation(PKOnlyObject(
|
||||||
|
5)) == 'http://testserver/v2/namespaced/5/'
|
||||||
|
|
||||||
def test_api_url_is_properly_reversed_with_nested(self):
|
def test_api_url_is_properly_reversed_with_nested(self):
|
||||||
field = self._create_field('nested', 'v1:nested-namespace')
|
field = self._create_field('nested', 'v1:nested-namespace')
|
||||||
assert field.to_representation(PKOnlyObject(3)) == 'http://testserver/v1/nested/namespaced/3/'
|
assert field.to_representation(PKOnlyObject(
|
||||||
|
3)) == 'http://testserver/v1/nested/namespaced/3/'
|
||||||
|
|
||||||
def test_non_api_url_is_properly_reversed_regardless_of_the_version(self):
|
def test_non_api_url_is_properly_reversed_regardless_of_the_version(self):
|
||||||
"""
|
"""
|
||||||
Regression test for #2711
|
Regression test for #2711
|
||||||
"""
|
"""
|
||||||
field = self._create_field('non-api-view', 'v1')
|
field = self._create_field('non-api-view', 'v1')
|
||||||
assert field.to_representation(PKOnlyObject(10)) == 'http://testserver/non-api/10/'
|
assert field.to_representation(PKOnlyObject(
|
||||||
|
10)) == 'http://testserver/non-api/10/'
|
||||||
|
|
||||||
field = self._create_field('non-api-view', 'v2')
|
field = self._create_field('non-api-view', 'v2')
|
||||||
assert field.to_representation(PKOnlyObject(10)) == 'http://testserver/non-api/10/'
|
assert field.to_representation(PKOnlyObject(
|
||||||
|
10)) == 'http://testserver/non-api/10/'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.conf.urls import include, url
|
from django.urls import include, path, re_path
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ router.register(r'names', ActionNamesViewSet, basename='names')
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^api/', include(router.urls)),
|
path('api/', include(router.urls)),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,14 @@ URLConf for test suite.
|
||||||
|
|
||||||
We need only the docs urls for DocumentationRenderer tests.
|
We need only the docs urls for DocumentationRenderer tests.
|
||||||
"""
|
"""
|
||||||
from django.conf.urls import url
|
from django.urls import path
|
||||||
|
|
||||||
from rest_framework.compat import coreapi
|
from rest_framework.compat import coreapi
|
||||||
from rest_framework.documentation import include_docs_urls
|
from rest_framework.documentation import include_docs_urls
|
||||||
|
|
||||||
if coreapi:
|
if coreapi:
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^docs/', include_docs_urls(title='Test Suite API')),
|
path('docs/', include_docs_urls(title='Test Suite API')),
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
urlpatterns = []
|
urlpatterns = []
|
||||||
|
|
Loading…
Reference in New Issue
Block a user