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/
.
我有一个现有的 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/
.