【问题标题】:django-rest-framework: how to integrate URLs into existing Django application?django-rest-framework:如何将 URL 集成到现有的 Django 应用程序中?
【发布时间】:2015-04-04 16:53:42
【问题描述】:

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

【问题讨论】:

    标签: django api django-rest-framework


    【解决方案1】:

    你少了一个斜线:

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

    在末尾添加一个斜杠,否则只会匹配api/1.0county/

    【讨论】:

    • 我绝对建议在此处添加斜杠(在您的回答中),以便来自未来的人更好地理解您的意思。
    最近更新 更多