django - django apiview 中自定义方法的 URL
问题描述
我是 Django 的新手,我对 Djangoapiview
的自定义方法有点困惑。在 ApiView 中,如何创建自定义方法以及如何从 axios 调用。
例如
这是我的看法
class TimeSheetAPIView(APIView):
@action(methods=['get'], detail=False)
def getbytsdate(self, request):
return Response({"timesheet":"hello from getbydate"})
def get(self,request,pk=None):
if pk:
timesheet=get_object_or_404(TimeSheet.objects.all(),pk=pk)
serializer = TimeSheetSerializer(timesheet)
return Response({serializer.data})
timesheet=TimeSheet.objects.all()
serializer = TimeSheetSerializer(timesheet,many=True)
return Response({"timesheet":serializer.data})
这是我的网址=>
url(r'^timesheets_ts/(?P<pk>\d+)/$', TimeSheetAPIView.as_view()),
url(r'^timesheets_ts/', TimeSheetAPIView.as_view()),
通常我的网址会像=>
api/timesheet_ts/
这个会得到我所有的记录。
所以我的问题是如何为或其他某种自定义获取方法设置getbytsdate
URL getbyname
?我该怎么打电话?
我试过这样=>
url(r'^timesheets_ts/getbytsdate/(?P<tsdate>[-\w]+)/$', TimeSheetAPIView.as_view()),
我就这样打电话
api/timesheets_ts/getbytsdate/?tsdate='test'
它不起作用。
那么请您解释一下自定义方法apiview
和url设置吗?
解决方案
除了您的实现之外,您只需向您的urls.py
. 编辑您urls.py
的如下:
# urls.py
timesheet_getbytsdate_detail = TimeSheetAPIView.as_view({'get': 'getbytsdate'})
timesheet_detail = TimeSheetAPIView.as_view({'get': 'retrieve'})
urlpatterns = [
url(r'^timesheets_ts/getbytsdate/(?P<tsdate>[-\w]+)/$', getbytsdate_detail),
url(r'^timesheets_ts/(?P<pk>[0-9]+)/', timesheet_detail),
]
编辑:您需要使用组合viewsets.GenericViewSet
,mixins.RetrieveModelMixin
而不是APIVew
使用它:
class TimeSheetAPIView(viewsets.GenericViewSet, mixins.RetrieveModelMixin):
@action(methods=['get'], detail=False)
def getbytsdate(self, request):
return Response({"timesheet":"hello from getbydate"})
def retrieve(self, request, *args, **kwargs):
timesheet=self.get_object()
serializer = TimeSheetSerializer(timesheet)
return Response({serializer.data})
timesheet=TimeSheet.objects.all()
serializer = TimeSheetSerializer(timesheet,many=True)
return Response({"timesheet":serializer.data})
推荐阅读
- python - Reading all json files in a directory
- python - Python pcl_visualization,sirokujira,Visual Studio 2017 中没有方法/参数预览
- spring - Spring Boot Security - 多种配置
- .net - .NET TPL 线程性能问题
- android - 单个元素的 FrameLayout 有什么意义
- jquery - Excel Add In - Where does console.log output it's message - NodeJS
- python - Running interactive program from within python
- php - FOSUserBundle & Symfony 3.4:登录页面在生产模式下显示 404 页面
- laravel - 尝试在控制器中循环时,此页面无法正常工作错误
- reactjs - 如何从 react-draft-wysiwyg 中的 ContentState 的给定 JSON 数据更新编辑器状态?