Python 如何让Django 1.5 login_所需的decorator返回403状态码

Python 如何让Django 1.5 login_所需的decorator返回403状态码,python,django,django-1.5,Python,Django,Django 1.5,似乎没有任何raise_异常参数起作用 @login_required def hi (request): return HttpResponse("hello") 我需要从AJAX javascript调用它,所以我不需要重定向,只需要403状态代码就可以了。只需在视图本身中进行检查 def hi(request): if request.user.is_authenticated(): # Allow access. else: raise

似乎没有任何raise_异常参数起作用

@login_required
def hi (request):
  return HttpResponse("hello")

我需要从AJAX javascript调用它,所以我不需要重定向,只需要403状态代码就可以了。

只需在视图本身中进行检查

def hi(request):
    if request.user.is_authenticated():
      # Allow access.
    else:
        raise MyException()
…或者使用您自己的应用类似逻辑的装饰器

编辑:添加了示例装饰器

from django.http.response import HttpResponseForbidden
from django.utils.decorators import available_attrs
from functools import wraps

def alt_login_required(function=None):
    def decorator(view_func):
        def _wrapped_view(request, *args, **kwargs):
            if request.user.is_authenticated():
                return view_func(request, *args, **kwargs)
            else:
                return HttpResponseForbidden()

        return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view)
    if function is None:
        return decorator
    else:
        return decorator(function)

谢谢/+1,但我不想为每个视图复制if-else编写自定义装饰器。我尝试了示例装饰器,但得到:
未定义全局名称“wrapps”
我已包含所需的导入语句。作为替代方法,您可以使用装饰器,它接受一个参数
raise\u exception
来告诉它引发403而不是重定向-只需检查所有用户都将拥有的权限。