gpt4 book ai didi

Django 测试返回 _wrapped_view 作为 View 名称而不是正确的 View 名称

转载 作者:行者123 更新时间:2023-12-04 06:01:13 25 4
gpt4 key购买 nike

在我的 Django 项目中,我通常使用以下方法测试被调用的 View 是否正确:

viewName = resolve(response.request["PATH_INFO"])[0].func_name
self.assertEqual(viewName,'correct_view_name')

我能够成功地做到这一点,直到我添加了一个装饰器。从那时起,我的 View 工作正常,但我无法测试(至少像这样)正确的 View 名称。

我添加的装饰器如下所示:
def owner_required(view_func, Model):
'''
checks if the object is being accessed but its owner
'''
def decorator(view_func):
def _wrapped_view(request, *args, **kwargs):
obj = Model.objects.get(pk=int(kwargs['pk']))
if obj.user == request.user:
return view_func(request, *args, **kwargs)
return HttpResponse('You don't have access to this page.')
return _wrapped_view
return decorator(view_func)
resolve(response.request["PATH_INFO"])[0].func_name的结果当我应用这个装饰器时总是“_wrapped_view”

如何让 View 名称恢复正常?

谢谢

最佳答案

您可以使用 functools.wraps 在你的装饰器中。

try:
from functools import wraps
except ImportError:
from django.utils.functional import wraps # Python 2.4 fallback.
from django.utils.decorators import available_attrs

def owner_required(view_func, Model):
'''
checks if the object is being accessed but its owner
'''
def decorator(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
obj = Model.objects.get(pk=int(kwargs['pk']))
if obj.user == request.user:
return view_func(request, *args, **kwargs)
return HttpResponse('You don't have access to this page.')
return _wrapped_view
return decorator(view_func)

关于Django 测试返回 _wrapped_view 作为 View 名称而不是正确的 View 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com