在我的DRF项目中,我有2个应用,Users
和Products
。 Products
有2个模型:Category
和Product
。我的root URL conf看起来像这个
api_urls = [
path('users/', include('users.urls')),
path('products/', include('products.urls'))
]
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(api_urls))
]
和products.urls
urlpatterns = [
path('', views.ProductListCreateAPIView.as_view())
]
我希望我的API方案类似于
/api/users/
/api/products/
/api/categories/
现在,这适用于前两个URL,但显然不是第三个,即如果我要添加
path('categories', views.CategoriesListCreateAPIView.as_view())
到我的products.urls,URL方案将是
/api/products/categories/
我的问题是,是否有某种方法可以实现/api/categories/
目标而不将Category
拆分为自己的应用程序?我觉得好像拥有自己的应用程序并且应该与Product
在同一个应用程序中,这太微不足道了。显然,我想我可以直接在根URL conf中导入视图,但这并不像是一个干净的'解。我应该考虑为类别创建单独的应用程序吗?产品模型与Category具有外键关系,对我来说,感觉好像两个独立的应用程序只会使事情变得复杂。
答案 0 :(得分:2)
首先,你需要认识到你有一些相互矛盾的要求;你想做一些不寻常的事情(在同一个应用程序中有两个独立的根路径),但你也想保持它"干净"。
我能想到的最干净的解决方案是在包含app urlconf时根本不使用前缀,而是像在api前缀中那样在文件中设置它。所以:
path('', include('products.urls'))
然后
product_patterns = [
path('', views.ProductListCreateAPIView.as_view()),
...
]
urlpatterns = [
path('categories', views.CategoriesListCreateAPIView.as_view()),
path('products/', include(product_patterns)
]
答案 1 :(得分:2)
我最终选择了以下方法:我在应用程序中创建了一个URL模块,并在其中添加了两个<div class="col-xs-6"></div>
,而不是在urls.py
应用中使用单个Products
, urlconfs
和Category
各占一个。
Product
然后我#product/urls/producturls.py
urlpatterns = [
path('', views.ProductListCreateAPIView.as_view())
]
#product/urls/categoryurls.py
urlpatterns = [
path('', views.CategoryListCreateAPIView.as_view())
]
在我的根include()
urlconf