【发布时间】:2019-10-30 03:21:16
【问题描述】:
我正在通过传递参数在 DRF API 中创建删除方法,但我不知道如何正确传递 orientdb @rid。
我在 orientdb 中有一个名为“worksat”的关系,在 OrientDB Studio 中,我可以看到 @rid 的结构名称类似于 #:,即:“#33:1”是 @rid工作卫星关系记录。
所以我需要在我的 DRF URL api 关系中传递该字符串:
http://127.0.0.1:8000/api/oworksat/
但是像这样传递:
http://127.0.0.1:8000/api/oworksat/#33:1
我看到 GET 请求,消息如下(我希望看到 DELETE):
Allow: GET, POST, HEAD, OPTIONS
如果传递一个简单的数字:
http://127.0.0.1:8000/api/oworksat/1
然后我看到DELETE请求(显然“1”不存在):
HTTP 404 Not Found
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
api.py:
class OWorksAtViewSet(viewsets.ModelViewSet):
queryset = graph.oworksat.query()
serializer_class = OWorksAtSerializer
permission_classes = [
permissions.AllowAny
]
def destroy(self, request, *args, **kwargs):
print ("destroy")
import pdb;pdb.set_trace()
urls.py:
from django.conf.urls import include, url
from rest_framework import routers
from .api import (OWorksAtViewSet)
from rest_framework_swagger.views import get_swagger_view
router = routers.DefaultRouter()
router.register('api/oworksat', OWorksAtViewSet, 'oworksat')
schema_view = get_swagger_view(title='Swagger Documentation')
urlpatterns = [
url(r'^swagger/$', schema_view)
]
urlpatterns += router.urls
有趣的是,通过从 swagger api 访问,在 DELETE 方法中,如果我传入请求“#33:1”的 ID,它会起作用,api 调用我的 destroy 方法并在 kwargs 中接收:kwargs = {'pk': '#33:1'}。
如何从 DRF api 实现该行为?
已编辑: 这是我实现销毁方法的临时解决方案,但显然这只适用于 Swagger UI,通过在请求中传递 @rid。
from rest_framework import status
from rest_framework.response import Response
from core.pyorient_client import *
class OFriendsViewSet(viewsets.ModelViewSet):
def destroy(self, request, *args, **kwargs):
client = orientdbConnection()
client.command("delete edge ofriends where @rid = '" + kwargs['pk'] + "'")
return Response(status=status.HTTP_204_NO_CONTENT)
【问题讨论】:
-
您是否使用任何 REST 客户端在第一个场景中发出请求?它是否达到了代码?您在这里遇到的错误是什么?如果您使用
/#33:1/拨打DELETE会发生什么? -
我正在使用 rest 框架来提出请求。通过传递127.0.0.1:8000/api/oworksat/#33:1,响应为 200,但使用 GET 方法(所以它没有到达 destroy 方法),我需要允许 DELETE 方法的行为
-
所以在你的rest框架客户端,你看不到DELETE方法对吧?
-
我可以看到它,但不是通过在查询字符串中传递#33:1,传递#33:1 我只看到 GET 和 POST 方法
标签: django python-3.x django-rest-framework orientdb pyorient