大佬教程收集整理的这篇文章主要介绍了如何重用另一个基于类的 api 视图的 GET 调用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我很难在另一个 APIVIEw 中重新使用来自现有 APIVIEw 的 get
调用。
我有一个基于类的 DRF 视图:
# in urls.py
path('API/something',vIEws.somethingList.as_vIEw()),path('API/similarsomething',#legacy url
# in vIEws.py
class SomethingList(generics.ListCreateAPIVIEw):
queryset = Something.objects.all()
serializer_class = Somethingserializer
# overrIDe get,because of some required custom action
def get(self,request,*args,**kwargs):
# do some custom actions (scan folder on filesystem)
...
return super().get(request,**kwargs)
上述视图都提供了 get
(列表)和 post
(创建)API 接口。如预期。我已经用 DRF 壮观的信息(此处未显示)对其进行了扩充,以生成我的 swagger 文档。
现在,我定义了另一个(旧版)URL,它应该与上面的 get(列表)调用完全相同。目前,此旧网址也指向 SomethingList
。
但是......旧的 URL 不应该提供发布(创建)界面,我想使用 drf-spectacular 在 swagger 中将其标记为“已弃用”。所以我想我需要一个单独的类来限制 get() 并添加 @extend_scheR_845_11845@a
装饰器
所以我想重新使用现有的 SomethingList.get
功能如下:
# in urls.py
path('API/something',vIEws.SimilarsomethingList.as_vIEw()),# ! points to new class
# in vIEws.py
class SomethingList(generics.ListCreateAPIVIEw):
...
class SimilarsomethingList(generics.ListAPIVIEw): #ListAPIVIEw only!
@extend_scheR_845_11845@a(sumMary="Deprecated and other info..")
def get(self,**kwargs):
vIEw = SomethingList.as_vIEw()
return vIEw.get(request,**kwargs)
然而,这行不通。我得到AttributeError: 'function' object has no attribute 'get'
我尝试了几种变体,但也无法正常工作。
问题:
如何重用来自另一个 APIVIEw 的 get()
调用?应该很简单,所以我可能会忽略一些明显的东西。
将 http_method_names
设置为类视图。
class SomethingList(generics.ListCreateAPIView):
http_method_names = ['get','head']
以上是大佬教程为你收集整理的如何重用另一个基于类的 api 视图的 GET 调用全部内容,希望文章能够帮你解决如何重用另一个基于类的 api 视图的 GET 调用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。