【问题标题】:DRF override a class function for function based viewsDRF 覆盖基于函数的视图的类函数
【发布时间】:2020-04-04 03:25:23
【问题描述】:

我有一个基于函数的视图(带有api_view 装饰器),我想更改APIView 的类函数之一。 例如。

@api_view(['GET'])
...
def a_view(request, id):
    ...
    return Response({'data': 'testing'}, status=200)

我想用这个覆盖 APIView 的一个函数(比如initialize_request)。

class ViewOverrideMixin(object):
    def initialize_request(self, request, *args, **kwargs):
        # do_something
        super(ViewOverrideMixin, self).initialize_request(request, *args, **kwargs)

如果这是一个基于类的视图,我可以将新函数放在视图类中或继承这个 mixin,对于基于函数的视图如何做到这一点? 可以添加装饰器覆盖类功能吗?


def decorator(viewfn):
    def wrapper(fn):
        # override the APIView function with custom mixin here return the class
        # what would that be?
        return fn
    return wrapper(viewfn)

【问题讨论】:

    标签: django-rest-framework django-views python-decorators


    【解决方案1】:

    初始化过程和其他 DRF 事情发生在 @api_view 装饰器中。如果您想调整功能,您必须编写自己的自定义 api_view 装饰器。

    可以找到同样here in GitHub的源码


    注意:在您的情况下,编写新的 api_view 装饰器似乎是多余的,请使用 CBV,并覆盖该方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多