程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何重用另一个基于类的 api 视图的 GET 调用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何重用另一个基于类的 api 视图的 GET 调用?

开发过程中遇到如何重用另一个基于类的 api 视图的 GET 调用的问题如何解决?下面主要结合日常开发的经验,给出你关于如何重用另一个基于类的 api 视图的 GET 调用的解决方法建议,希望对你解决如何重用另一个基于类的 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']

https://stackoverflow.com/a/31451101/13022138

大佬总结

以上是大佬教程为你收集整理的如何重用另一个基于类的 api 视图的 GET 调用全部内容,希望文章能够帮你解决如何重用另一个基于类的 api 视图的 GET 调用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:api调用