【问题标题】:Django test returning _wrapped_view as view name instead of proper view nameDjango 测试返回 _wrapped_view 作为视图名称而不是正确的视图名称
【发布时间】:2012-02-10 19:01:09
【问题描述】:

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

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

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

我添加的装饰器是这样的:

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”

如何让视图名称恢复正常?

谢谢

【问题讨论】:

    标签: django view decorator


    【解决方案1】:

    你可以在你的装饰器中使用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)
    

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 1970-01-01
      • 2013-12-06
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多