django-rest-framework:如何将 URL 集成到现有的 Django 应用程序中?

django-rest-framework: how to integrate URLs into existing Django application?

我有一个现有的 Django 应用程序,我想添加一个 API。现在我只是想建立一个模型的表示。

首先,我只想在 /api/1.0/county 创建一个端点以显示所有县。

我在我的 Django 应用程序的顶层创建了一个名为 api 的文件夹,并在其中创建了一个包含以下内容的 urls.py 文件:

from django.conf.urls import url, include
from domes.models import County
from rest_framework import routers, serializers, viewsets

class CountySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = County
        fields = ('id', 'name')

class CountyViewSet(viewsets.ModelViewSet):
    queryset = County.objects.all()
    serializer_class = CountySerializer

router = routers.DefaultRouter()
router.register(r'county', CountyViewSet)

urlpatterns = [
    url(r'^', include(router.urls))
]

然后在我的根 urls.py 我添加了以下内容:

import api
...
urlpatterns = ( ....
  (r'^api/1.0', include(api.urls)),
)

但是如果我尝试在我的浏览器中加载 /api/1.0/county,我会看到 Page Not Found,因为在 urlpatterns 中找不到 URL。 Django 似乎知道以下 URL 模式:

^api/1.0 ^ ^$ [姓名='api-root']

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

我怎样才能让这两个 URL 文件很好地一起播放?

如果可能,我希望将 API URL 保存在与主应用程序不同的文件中。文档中的所有示例似乎都假定 django-rest-framework 将用作独立应用程序,但我需要将其集成到现有应用程序中。

你少了一个斜杠:

urlpatterns = ( ....
  (r'^api/1.0', include(api.urls)),
)

最后加斜杠,否则只会匹配api/1.0county/.