Skip to main content
 首页 » 编程设计

python之Django 2.0 和 DRF 3.7.7 路由器

2025年05月04日30leader

我正在使用 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 模式?

请您参考如下方法:

参见: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 方法