Django REST Framework URLs with Django 2.0

2019-04-09 07:52发布

I'm trying to set up Django REST Framework with Django 2.0 project which means url(r'^something/' ... has been replaced with path(something/ ....

I'm trying to work out how to set up my rest_framework patterns.

This is what I have:

router = routers.DefaultRouter()
router.register(r'regulations', api.RegulationViewSet)
router.register(r'languages', api.LanguageViewSet)


urlpatterns = [
    ...
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    ...
]

If I go to http://127.0.0.1:8000/regulations I simply get:

Page not found (404)

How should I set up my urlpatterns?

2条回答
爷的心禁止访问
2楼-- · 2019-04-09 08:25
urlpatterns = [
    ...
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    ...
]

with path('', include(router.urls)), you can get:

http://127.0.0.1:8000/regulations/
http://127.0.0.1:8000/languages/

with

path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),

you can get:

http://127.0.0.1:8000/api-auth/{other paths}
查看更多
Evening l夕情丶
3楼-- · 2019-04-09 08:35

After registering the router you have to include it in the urlpatterns. The way how @Ykh suggested is technically correct, but with regards to content is missing the point.

urlpatterns = [
    # here you include your router
    path('', include(router.urls)),
    # here you include the authentication paths
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

Now you'll have the following routes:

http://localhost:8000/regulations/
http://localhost:8000/languages/

plus:

http://localhost:8000/api-auth/{other paths}
查看更多
登录 后发表回答