我有一个现有的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将用作独立应用程序,但我需要将其集成到现有应用程序中。
答案 0 :(得分:0)
你错过了一个斜线:
urlpatterns = ( ....
(r'^api/1.0', include(api.urls)),
)
在末尾添加斜杠,或者只匹配api/1.0county/
。