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

时间:2015-04-04 16:53:43

标签: django api django-rest-framework

我有一个现有的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中找不到该网址。 Django似乎知道以下URL模式:

^ api / 1.0 ^ ^ $ [name ='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网址保存在与主应用程序不同的文件中。文档中的所有示例似乎都假设django-rest-framework将用作独立应用程序,但我需要将其集成到现有应用程序中。

1 个答案:

答案 0 :(得分:0)

你错过了一个斜线:

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

在末尾添加斜杠,或者只匹配api/1.0county/