python-如何通过Django Rest Framework公开非模型模块方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-如何通过Django Rest Framework公开非模型模块方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1934字,纯文字阅读大概需要3分钟。
内容图文
![python-如何通过Django Rest Framework公开非模型模块方法?](/upload/InfoBanner/zyjiaocheng/682/a6523e72d4f347bea5cb80dc3a8db5e4.jpg)
我正在使用Django Rest Framework创建API.通过API公开了诸如City之类的模型类.现在,我用一些有用的方法创建了一个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
argument not specified, and could not automatically determine the name from the viewset, as it does not have a.queryset
attribute.
我希望看到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
有用的链接
> Tutorial 2: Requests and Responses
解决方法:
如果需要列出新的入口点,则需要从ViewSet继承(请注意,我并不是在讲ModelViewSet).
我在此处编写了一个简短的指导示例项目,以了解如何执行此操作:https://medium.com/@linovia/django-rest-framework-viewset-when-you-don-t-have-a-model-335a0490ba6f
您不需要所有ViewSet方法,可能只需要根据您的注释列出一个即可.
内容总结
以上是互联网集市为您收集整理的python-如何通过Django Rest Framework公开非模型模块方法?全部内容,希望文章能够帮你解决python-如何通过Django Rest Framework公开非模型模块方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。