Django 2.0中的Django REST框架URLs

9

我正在尝试在Django 2.0项目中使用Django REST框架,这意味着url(r'^something/' ...已被替换为path(something/ ...

我正在努力了解如何设置我的rest_framework模式。

这是我拥有的:

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')),
    ...
]

如果我访问http://127.0.0.1:8000/regulations,只会得到如下信息:

页面未找到 (404)

。请问如何设置urlpatterns

1
url() 没有被替换。它仍然有效。 path() 是一种替代方案。但是请注意,您似乎没有为/regulations定义URL。 - Daniel Roseman
1
@DanielRoseman 但是他已经在router中注册了regulations。他需要通过include或者连接的方式将其实现在urlpatterns中:urlpatterns += router.urls - cezar
2个回答

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

使用 path('', include(router.urls)),您可以获得:

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

随着

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

你可以获得:

http://127.0.0.1:8000/api-auth/{other paths}

这将导致 http://localhost:8000/api-auth/regulations。同时,rest_framework.urls 也是正确的,但它是用于 Django REST Framework 提供的身份验证路由。routers.urls 应该包含在另一个路径下。 - cezar
然后您应该删除最后一句话并添加解释。 - cezar

3

注册router后,您需要将其包含在urlpatterns中。@ Ykh建议的方式在技术上是正确的,但就内容而言,却是缺失了重点。

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')),
]

现在您将拥有以下路由:
http://localhost:8000/regulations/
http://localhost:8000/languages/

加号:

http://localhost:8000/api-auth/{other paths}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接