В настоящее время я импортирую конфигурации URL в свой проект Django с помощью:
from django.conf.urls import include
from django.contrib import admin
from django.urls import path, re_path
from rest_framework import routers
from greeter.views import GreeterViewSet
ROUTER = routers.DefaultRouter()
ROUTER.register(r'greeters', GreeterViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^', include(ROUTER.urls)),
]
Есть ли способ, где я могу переместить эти части кода:
ROUTER = routers.DefaultRouter()
ROUTER.register(r'greeters', GreeterViewSet)
в отдельныйфайл в greeter/urls.py
?
И по-прежнему сохраняйте эти URL:
- GET / greeter / для получения списка встречающих
- POST / greeter / для создания новогоgreeter
Я пытался:
my_project / urls.py
from django.conf.urls import include
from django.contrib import admin
from django.urls import path, re_path
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^greeters/', include('greeter.urls')),
]
greeter / urls.py
from django.conf.urls import url, include
from rest_framework import routers
from .views import GreeterViewSet
ROUTER = routers.DefaultRouter()
ROUTER.register(r'^', GreeterViewSet)
urlpatterns = [
url(r'^', include(ROUTER.urls)),
]
Но получил:
$ curl -H 'Accept: application/vnd.api+json; indent=2' -X POST http://localhost:8000/greeters/
{
"errors": [
{
"detail": "Method \"POST\" not allowed.",
"source": {
"pointer": "/data"
},
"status": "405"
}
]
}
В случае, если это поможет, вот мой оригинальный вопрос, который был решен: Метод "POST" не разрешен с Django Rest Framework
Обновление:
С помощью ответов я смог найти решение:
my_project / urls.py
from django.conf.urls import include
from django.contrib import admin
from django.urls import re_path
urlpatterns = [
re_path('admin/', admin.site.urls),
re_path('greeters/', include('greeter.urls')),
]
greeter / urls.py
from django.conf.urls import include
from django.urls import re_path
from rest_framework import routers
from .views import GreeterViewSet
ROUTER = routers.DefaultRouter()
ROUTER.register(r'', GreeterViewSet)
urlpatterns = [
re_path(r'', include(ROUTER.urls)),
]
При этом:
- вся конфигурация URL-адреса greeter хранится внутри модуля greeter
- конфигурация url проекта связывает ресурс 'greeter' с приветствиемer module
- кажется, что в конфигурацию URL приветствия могут быть добавлены дополнительные виды приветствия (я не проверял это)
Я думаю, что это настолько хорошо, насколько я могу получить,Еще раз спасибо за помощь:)