Django Rest-将@action与自定义装饰器一起使用

标签 django rest

我在Django中有一个Rest API,并且在扩展ModelViewSet的类中有以下方法:

@custom_decorator
@action(methods=['get'], detail=False, url_name="byname", url_path="byname")
def get_by_name(self, request):
    # get query params from get request
    username = request.query_params["username"]
    experiment = request.query_params["experiment"]
如果删除第一个注释器,则一切正常。但是,当我尝试使用两个装饰器调用此函数时,它甚至都找不到特定的URL路径。
是否可以将多个装饰器与@action装饰器一起使用?

最佳答案

我遇到了相同的问题,并通过以下方式解决了该问题:

from functools import wraps

def custom_decorator(func):
  # ADD THIS LINE TO YOUR CUSTOM DECORATOR
  @wraps(func)
  def func_wrapper(*args, **kwargs):
    return func(*args, **kwargs)
  return func_wrapper

@action(methods=['get'], detail=False, url_name="byname", url_path="byname")
@custom_decorator
def get_by_name(self, request):
  # other code

我认为问题在于操作修饰器在添加custom_decorator后无法识别该函数,因为名称已更改,因此通过添加@wraps(func)可以使函数名称保持不变。 (@wraps docs)

关于Django Rest-将@action与自定义装饰器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59195709/

相关文章:

Django - 以 ManytoMany 形式显示图像字段而不是标题

java - 如何从 REST Web 服务读取规范

c# - Azure函数输出API调用第三方服务

javascript - CakePHP REST API 为 AJAX 提供 403 但不为 cURL

java - 如何在运行时更改 API Base Url(Retrofit、Android、Java)?

java - 使用reSTLet上传文件

Django 测试用例 : SimpleUploadedFile shows wrong filetype

python - 使用 PIL 调整大小时丢失图像格式

python - PyDev 和 Django : how to restart dev server?

python - Django 表单 ForeignKey 数据库字段不是下拉列表