【发布时间】:2015-10-09 12:32:12
【问题描述】:
我正在使用Django Rest Framework 创建一个 API。有一些模型类,例如 City,它们通过 API 公开。现在我用一些有用的方法创建了一个utils 模块:
# city/utils.py
def distance_between_cities(city1, city2):
return city1.distance(city2)
我想将示例方法 distance_between_cities 公开为 API 端点。所以我从创建一个视图开始:
# city/views.py
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from . import utils
class DistanceView(APIView):
def get(self, request, format=None):
city1 = request.query_params.get('city1', None)
city2 = request.query_params.get('city2', None)
distance = utils.distance_between_cities(city1, city2)
distance_hash = {'distance': distance}
return Response(distance_hash, status=status.HTTP_200_OK)
然后我尝试注册一个路由:
# city/urls.py
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
router.register(r'distance', views.DistanceView)
当我访问该网站时,会显示以下错误:
base_name参数未指定,并且无法从视图集中自动确定名称,因为它没有.queryset属性。
我希望看到 DRF 呈现的网站中的端点类似于其他(与模型相关的)端点。
最后,我想通过以下方式访问端点:
http://localhost:8000/api/cities/distance.json?city1=23&city1=42
我尝试通过 curl 检查 API:
$ curl -X HEAD -i http://localhost:8000/api/cities/distance.json?city1=23&city2=42
这是响应头:
HTTP/1.0 404 NOT FOUND
Date: Fri, 09 Oct 2015 16:45:06 GMT
Server: WSGIServer/0.2 CPython/3.4.3
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Vary: Accept, Cookie
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
有用的链接
【问题讨论】:
标签: python django django-rest-framework