used path and re_path for urls

This commit is contained in:
Asif Saif Uddin (Auvi) 2019-09-20 14:42:19 +06:00
parent 8c4e83c5df
commit c436b8ab00
8 changed files with 110 additions and 66 deletions

View File

@ -11,11 +11,15 @@ your API requires authentication:
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
app_name = 'rest_framework'
urlpatterns = [
url(r'^login/$', views.LoginView.as_view(template_name='rest_framework/login.html'), name='login'),
url(r'^logout/$', views.LogoutView.as_view(), name='logout'),
path(
'login/',
views.LoginView.as_view(template_name='rest_framework/login.html'),
name='login'
),
path('logout/', views.LogoutView.as_view(), name='logout'),
]

View File

@ -2,11 +2,10 @@ import warnings
from collections import namedtuple
import pytest
from django.conf.urls import include, url
from django.core.exceptions import ImproperlyConfigured
from django.db import models
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 (
RemovedInDRF311Warning, permissions, serializers, viewsets
@ -122,7 +121,7 @@ class TestSimpleRouter(URLPatternsTestCase, TestCase):
router.register('basics', BasicViewSet, basename='basic')
urlpatterns = [
url(r'^api/', include(router.urls)),
path('api/', include(router.urls)),
]
def setUp(self):
@ -167,8 +166,13 @@ class TestSimpleRouter(URLPatternsTestCase, TestCase):
class TestRootView(URLPatternsTestCase, TestCase):
urlpatterns = [
url(r'^non-namespaced/', include(namespaced_router.urls)),
url(r'^namespaced/', include((namespaced_router.urls, 'namespaced'), namespace='namespaced')),
path('non-namespaced/', include(namespaced_router.urls)),
path(
'namespaced/',
include(
(namespaced_router.urls, 'namespaced'),
namespace='namespaced')
),
]
def test_retrieve_namespaced_root(self):
@ -185,8 +189,8 @@ class TestCustomLookupFields(URLPatternsTestCase, TestCase):
Ensure that custom lookup fields are correctly routed.
"""
urlpatterns = [
url(r'^example/', include(notes_router.urls)),
url(r'^example2/', include(kwarged_notes_router.urls)),
path('example/', include(notes_router.urls)),
path('example2/', include(kwarged_notes_router.urls)),
]
def setUp(self):
@ -243,8 +247,8 @@ class TestLookupUrlKwargs(URLPatternsTestCase, TestCase):
Setup a deep lookup_field, but map it to a simple URL kwarg.
"""
urlpatterns = [
url(r'^example/', include(notes_router.urls)),
url(r'^example2/', include(kwarged_notes_router.urls)),
path('example/', include(notes_router.urls)),
path('example2/', include(kwarged_notes_router.urls)),
]
def setUp(self):

View File

@ -1,6 +1,6 @@
from io import BytesIO
from django.conf.urls import url
from django.urls import path
from django.contrib.auth.models import User
from django.shortcuts import redirect
from django.test import TestCase, override_settings
@ -47,10 +47,10 @@ def post_view(request):
urlpatterns = [
url(r'^view/$', view),
url(r'^session-view/$', session_view),
url(r'^redirect-view/$', redirect_view),
url(r'^post-view/$', post_view)
path('view/', view),
path('session-view/', session_view),
path('redirect-view/', redirect_view),
path('post-view/', post_view)
]
@ -284,7 +284,7 @@ class TestAPIRequestFactory(TestCase):
class TestUrlPatternTestCase(URLPatternsTestCase):
urlpatterns = [
url(r'^$', view),
path('', view),
]
@classmethod

View File

@ -1,11 +1,10 @@
import unittest
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.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.urlpatterns import format_suffix_patterns
@ -62,7 +61,7 @@ class FormatSuffixTests(TestCase):
def test_trailing_slash(self):
urlpatterns = [
url(r'^test/$', dummy_view),
path('test/', dummy_view),
]
self._test_trailing_slash(urlpatterns)
@ -83,7 +82,7 @@ class FormatSuffixTests(TestCase):
def test_format_suffix(self):
urlpatterns = [
url(r'^test$', dummy_view),
path('test/', dummy_view),
]
self._test_format_suffix(urlpatterns)
@ -120,7 +119,7 @@ class FormatSuffixTests(TestCase):
def test_default_args(self):
urlpatterns = [
url(r'^test$', dummy_view, {'foo': 'bar'}),
path('test/', dummy_view, {'foo': 'bar'}),
]
self._test_default_args(urlpatterns)
@ -141,10 +140,10 @@ class FormatSuffixTests(TestCase):
def test_included_urls(self):
nested_patterns = [
url(r'^path$', dummy_view)
path('path/', dummy_view)
]
urlpatterns = [
url(r'^test/', include(nested_patterns), {'foo': 'bar'}),
path('test/', include(nested_patterns), {'foo': 'bar'}),
]
self._test_included_urls(urlpatterns)
@ -164,7 +163,7 @@ class FormatSuffixTests(TestCase):
path('path', dummy_view)
]
urlpatterns = [
url('^test/', include(nested_patterns), {'foo': 'bar'}),
path('test/', include(nested_patterns), {'foo': 'bar'}),
]
self._test_included_urls(urlpatterns)
@ -172,11 +171,17 @@ class FormatSuffixTests(TestCase):
def test_included_urls_django2_mixed_args(self):
nested_patterns = [
path('path/<int:child>', dummy_view),
url('^url/(?P<child>[0-9]+)$', dummy_view)
re_path('^url/(?P<child>[0-9]+)$', dummy_view)
]
urlpatterns = [
url('^purl/(?P<parent>[0-9]+)/', include(nested_patterns), {'foo': 'bar'}),
path('ppath/<int:parent>/', include(nested_patterns), {'foo': 'bar'}),
re_path(
'^purl/(?P<parent>[0-9]+)/',
include(nested_patterns),
{'foo': 'bar'}),
path(
'ppath/<int:parent>/',
include(nested_patterns),
{'foo': 'bar'}),
]
test_paths = [
# parent url() nesting child path()
@ -212,7 +217,7 @@ class FormatSuffixTests(TestCase):
def test_allowed_formats(self):
urlpatterns = [
url('^test$', dummy_view),
path('test/', dummy_view),
]
self._test_allowed_formats(urlpatterns)

View File

@ -1,6 +1,6 @@
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 rest_framework.decorators import action
@ -64,12 +64,17 @@ class ResourceViewSet(ModelViewSet):
router = SimpleRouter()
router.register(r'resources', ResourceViewSet)
urlpatterns = [
url(r'^$', Root.as_view()),
url(r'^resource/$', ResourceRoot.as_view()),
url(r'^resource/customname$', CustomNameResourceInstance.as_view()),
url(r'^resource/(?P<key>[0-9]+)$', ResourceInstance.as_view()),
url(r'^resource/(?P<key>[0-9]+)/$', NestedResourceRoot.as_view()),
url(r'^resource/(?P<key>[0-9]+)/(?P<other>[A-Za-z]+)$', NestedResourceInstance.as_view()),
path('', Root.as_view()),
path('resource/', ResourceRoot.as_view()),
path('resource/customname/', CustomNameResourceInstance.as_view()),
re_path(
r'^resource/(?P<key>[0-9]+)$',
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

View File

@ -1,5 +1,5 @@
import pytest
from django.conf.urls import include, url
from django.urls import include, path, re_path
from django.test import override_settings
from rest_framework import serializers, status, versioning
@ -101,7 +101,8 @@ class TestRequestVersion:
scheme = versioning.AcceptHeaderVersioning
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)
assert response.data == {'version': '1.2.3'}
@ -144,14 +145,20 @@ class TestRequestVersion:
class TestURLReversing(URLPatternsTestCase, APITestCase):
included = [
url(r'^namespaced/$', dummy_view, name='another'),
url(r'^example/(?P<pk>\d+)/$', dummy_pk_view, name='example-detail')
path('namespaced/', dummy_view, name='another'),
re_path(
r'^example/(?P<pk>\d+)/$',
dummy_pk_view,
name='example-detail')
]
urlpatterns = [
url(r'^v1/', include((included, 'v1'), namespace='v1')),
url(r'^another/$', dummy_view, name='another'),
url(r'^(?P<version>[v1|v2]+)/another/$', dummy_view, name='another'),
path('v1/', include((included, 'v1'), namespace='v1')),
path('another/', dummy_view, name='another'),
re_path(
r'^(?P<version>[v1|v2]+)/another/$',
dummy_view,
name='another'),
]
def test_reverse_unversioned(self):
@ -167,7 +174,8 @@ class TestURLReversing(URLPatternsTestCase, APITestCase):
request = factory.get('/endpoint/?version=v1')
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/')
response = view(request)
@ -237,7 +245,8 @@ class TestInvalidVersion:
scheme = versioning.AcceptHeaderVersioning
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)
assert response.status_code == status.HTTP_406_NOT_ACCEPTABLE
@ -300,7 +309,8 @@ class TestAllowedAndDefaultVersion:
def test_missing_with_default_and_none_allowed(self):
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')
response = view(request)
@ -310,12 +320,15 @@ class TestAllowedAndDefaultVersion:
class TestHyperlinkedRelatedField(URLPatternsTestCase, APITestCase):
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 = [
url(r'^v1/', include((included, 'v1'), namespace='v1')),
url(r'^v2/', include((included, 'v2'), namespace='v2'))
path('v1/', include((included, 'v1'), namespace='v1')),
path('v2/', include((included, 'v2'), namespace='v2'))
]
def setUp(self):
@ -342,17 +355,25 @@ class TestHyperlinkedRelatedField(URLPatternsTestCase, APITestCase):
class TestNamespaceVersioningHyperlinkedRelatedFieldScheme(URLPatternsTestCase, APITestCase):
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 = [
url(r'^namespaced/(?P<pk>\d+)/$', dummy_pk_view, name='namespaced'),
url(r'^nested/', include((nested, 'nested-namespace'), namespace='nested-namespace'))
re_path(
r'^namespaced/(?P<pk>\d+)/$',
dummy_pk_view,
name='namespaced'),
path(
'nested/',
include(
(nested, 'nested-namespace'),
namespace='nested-namespace')
)
]
urlpatterns = [
url(r'^v1/', include((included, 'restframeworkv1'), namespace='v1')),
url(r'^v2/', include((included, 'restframeworkv2'), namespace='v2')),
url(r'^non-api/(?P<pk>\d+)/$', dummy_pk_view, name='non-api-view')
path('v1/', include((included, 'restframeworkv1'), namespace='v1')),
path('v2/', include((included, 'restframeworkv2'), namespace='v2')),
re_path(r'^non-api/(?P<pk>\d+)/$', dummy_pk_view, name='non-api-view')
]
def _create_field(self, view_name, version):
@ -368,22 +389,27 @@ class TestNamespaceVersioningHyperlinkedRelatedFieldScheme(URLPatternsTestCase,
def test_api_url_is_properly_reversed_with_v1(self):
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):
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):
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):
"""
Regression test for #2711
"""
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')
assert field.to_representation(PKOnlyObject(10)) == 'http://testserver/non-api/10/'
assert field.to_representation(PKOnlyObject(
10)) == 'http://testserver/non-api/10/'

View File

@ -1,7 +1,7 @@
from collections import OrderedDict
import pytest
from django.conf.urls import include, url
from django.urls import include, path, re_path
from django.db import models
from django.test import TestCase, override_settings
@ -88,7 +88,7 @@ router.register(r'names', ActionNamesViewSet, basename='names')
urlpatterns = [
url(r'^api/', include(router.urls)),
path('api/', include(router.urls)),
]

View File

@ -3,14 +3,14 @@ URLConf for test suite.
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.documentation import include_docs_urls
if coreapi:
urlpatterns = [
url(r'^docs/', include_docs_urls(title='Test Suite API')),
path('docs/', include_docs_urls(title='Test Suite API')),
]
else:
urlpatterns = []