【问题标题】:Django 2.0 and DRF 3.7.7 routersDjango 2.0 和 DRF 3.7.7 路由器
【发布时间】:2018-06-10 18:55:58
【问题描述】:

我正在使用 Django 2.0 和 DRF 3.7.7(两者都是新手)并尝试在 app_config/urls.py 中添加 URL 模式:

router = routers.DefaultRouter()
router.register(r'^submit_free_account', SubmitFreeAccount, 'SubmitFreeAccount')

app_name = 'app_config'  #the weird code

urlpatterns = [
    path('getSourcesNodes', GetSourcesNodes.post, name='GetSourcesNodes'),
    path('getAppsNodes', GetAppsNodes.post, name='GetAppsNodes'),
]

urlpatterns += router.urls

在主 urls.py 中:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('config/', include('app_config.urls', namespace='app_config')),
]

因此,当我尝试请求 config/submit_free_account 时,出现 404 错误,Django 尝试了奇怪的 URL 模式:

config/ ^$ [name='api-root']
config/ ^\.(?P<format>[a-z0-9]+)/?$ [name='api-root']

如何在 Django 2.0 中正确添加路由器 URL 模式?

【问题讨论】:

  • router.registet 应该与视图集一起使用。 SubmitFreeAccount 是视图集吗?显示代码。
  • SubmitFreeAccount 是 APIView(应该是 DRF 视图的标准类)
  • 视图不需要路由器,只需要一个视图集。使用标准的path()url() 来定义路由。
  • Daniel Roseman,但如果这样我有一个错误:“init 需要 1 个位置参数,但给出了 2 个”。它是 DRF,所以我不想使用 as_view() 方法。所以我不能有基于 CLASS 的视图。
  • 我不明白你为什么不想使用 as_view。这就是注册基于类的视图的方式。

标签: python django django-rest-framework url-routing


【解决方案1】:

见:Django REST Framework URLs with Django 2.0

router = routers.DefaultRouter()
# change to (see user8814926's answer):
router.register('submit_free_account', SubmitFreeAccount, 'SubmitFreeAccount')

app_name = 'app_config'  #the weird code

urlpatterns = [
    path('getSourcesNodes', GetSourcesNodes.post, name='GetSourcesNodes'),
    path('getAppsNodes', GetAppsNodes.post, name='GetAppsNodes'),

    #add this:
    path('', include(router.urls)),
]

总结一下:

  • 不要使用正则表达式
  • 不是通过添加到列表中来包含路由,而是使用如上所示的 include 方法

【讨论】:

    【解决方案2】:

    改变

    router.register(r'^submit_free_account', SubmitFreeAccount, 'SubmitFreeAccount')
    

    router.register('submit_free_account', SubmitFreeAccount, 'SubmitFreeAccount')
    

    【讨论】:

    • 我试过了,还以为这不是正则表达式,但情况并没有改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2015-08-08
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多