Я создаю API с использованием каркасов Django REST и хотел бы избавиться от всех косых черт во всех URL.
Я добавил APPEND_SLASH = False
в settings.py
Вот различные случаи, с которыми я столкнулся:
- Явные URL:
Нет проблем, так как мы можем полностью контролировать регулярное выражение:
urlpatterns = [...,url(r'^api/objects/(?P<pk>[0-9]+)/property$', SomeView.as_view(), name='object-property'),...]
Что позволяет отправлять запросы на /api/objects/1/property
- Использование маршрутизатора:
router = routers.DefaultRouter(trailing_slash=False)
router.register(r'some-endpoint',SomeViewSet,base_name='some_endpoint')
url(r'^api/', include(router.urls)),
Что позволяет отправлять запросы на /api/some-endpoint
- Проблема: Использование сторонних пакетов
Например, я пытаюсь использовать django-rest-auth. Я установил его с помощью pip и, следуя документам, добавил * нужные URL-адреса (включая регистрацию) в urlpatterns
следующим образом:
url(r'^api/', include('rest_auth.urls')),
url(r'^api/registration/account-confirm-email/(?P<key>[-:\w]+)/$', ConfirmEmailView.as_view(), name='account_confirm_email'),
url(r'^api/registration/', include('rest_auth.registration.urls')),
это сделает, например, конечную точку /api/login/
активной, но с косой чертой, которую я не хочу для согласованности.
Затем я попытался удалить url(r'^api/', include('rest_auth.urls'))
и, сосредоточившись на конечной точке login
, импортировал ее вид:
from rest_auth.views import LoginView
и добавил URL к urlpatterns
в надежде использовать его без косой черты:
url(r'^api/login$', LoginView.as_view(), name='rest_login'),
или
url(r'^api/login', LoginView.as_view(), name='rest_login'),
Ничего из этого не сработало.
Однако, если я добавлю косую черту:
url(r'^api/login/$', LoginView.as_view(), name='rest_login')
конечная точка будет работать.
- Незначительная проблема: Для администратора сайта
У меня похожая проблема с сайтом администратора, который добавляется:
url(r'^admin/', admin.site.urls),
все конечные точки имеют косые черты, включая /admin/
в то время как:
url(r'^api/docs', include_docs_urls(title='API Doc',public=False))
добавит документы без косой черты в любом месте.
Так как я могу удалить косые черты для:
- django-rest-auth или какой-либо другой сторонний пакет?
- для администратора сайта?
Большое спасибо за вашу помощь.