我是Django Rest Framework的新手,我一直在研究此问题,但找不到任何解决方案。我很确定这只是一个小细节,但我不知道。
我正在为项目使用DRF。团队选择不以'/'结束URL路径。我有一个使用POST方法链接到APIView的端点。我们要对在此POST中发送的正文进行一些处理。但是调用它会带来(邮递员响应):
405方法不允许
{
"detail": "Method \"POST\" not allowed."
}
在URL路径的末尾添加一个'/'可以正常工作(邮递员对正常行为的响应):
{
"success": True,
"message": "A message returned by the function in APIView"
}
urls.py
from django.urls import path, include
from runbook import views
from rest_framework.routers import DefaultRouter
router = DefaultRouter(trailing_slash=False)
router.register(r'my_objects', views.ObjectViewset)
urlpatterns = [
path('', include(router.urls)),
path('my_objects/myFunction',
views.MyFunctionView.as_view(),
name="my-function")
views.py
class MyFunctionView(APIView):
"""
"""
def post(self, request, format=None):
try:
MyObject.objects.get(slug=slugify(request.data['candidate_name']))
except MyObject.DoesNotExist:
return Response(boolean_response(False))
else:
return Response(boolean_response(True))
我阅读并尝试过的内容:
我还试图:
是否可以在不带'/'的情况下发出此请求?我使用Django工具有误吗?我看不到任何细微之处吗? 因此,如果有人有解决方案,建议或想法。谢谢!
答案 0 :(得分:0)
正如@Arakkal Abu在评论中所说,路由器与urlpatterns中的其他路径冲突
解决方案:将路由器包含在urlpatterns末尾的
router = DefaultRouter(trailing_slash=False)
router.register(r'my_objects', views.ObjectViewset)
urlpatterns = [
path('my_objects/myFunction',
views.MyFunctionView.as_view(),
name="my-function"),
path('', include(router.urls))
]
确实将 my_objects / myFunction 视为路由 my_objects / 的一部分,其中 my_objects / myFunction / 被视为单独的路由,为什么会起作用。