Python 装饰登录\需要Django装饰器

Python 装饰登录\需要Django装饰器,python,django,django-authentication,python-decorators,Python,Django,Django Authentication,Python Decorators,我正在尝试装饰Django装饰器所需的登录名。我一直在考虑这个问题。然而,这种情况有点不同,因为我不想修改login_所需的decorator,而是想为它添加更多的功能 为了清楚起见,我试图创建一个装饰器来装饰视图函数(第一个参数是request as normal),并检查用户参数。如果可能的话,我不想像这里建议的那样创建自己版本的decorator,因为我认为这是一种安全关键方法,将来可能会修改 这是我目前所得到的,但它不起作用 from django.conf import setting

我正在尝试装饰Django装饰器所需的登录名。我一直在考虑这个问题。然而,这种情况有点不同,因为我不想修改login_所需的decorator,而是想为它添加更多的功能

为了清楚起见,我试图创建一个装饰器来装饰视图函数(第一个参数是request as normal),并检查用户参数。如果可能的话,我不想像这里建议的那样创建自己版本的decorator,因为我认为这是一种安全关键方法,将来可能会修改

这是我目前所得到的,但它不起作用

from django.conf import settings
from django.contrib.auth.decorators import login_required, REDIRECT_FIELD_NAME
from django.http.response import HttpResponseRedirect
from django.utils.decorators import available_attrs
from functools import wraps


def login_and_def_pass_required(view_function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
    def decorate_view(view_function):
        @wraps(view_function, assigned=available_attrs(view_function))
        def _double_wrapped_view(request, *args, **kwargs):
            actual_decorator = login_required(view_function, redirect_field_name, login_url)
            if request.user.temporary_password:
                return HttpResponseRedirect(settings.SET_PERMANENT_PASSWORD_URL)
            return actual_decorator
        return _double_wrapped_view
    return decorate_view
这会引发异常“'function'对象没有属性'get'”

我正在使用Django 1.8.4 Python 3.4

您可以与
login\u required
配合使用,以实现所需的行为:

def check_permanent_password(user):
    return not user.temporary_password

@login_required(login_url)
@user_passes_test(check_temporary_password, login_url=settings.SET_PERMANENT_PASSWORD_URL)
def view(request):
    # your view

有什么原因不能在视图中使用decorator吗?如何将它与login required结合使用?@login_required()\n@user_passes_test(登录\u url=设置\u永久\u密码\u url)\n退出视图(请求…)。SO上的注释会删除换行符,因此我将它们添加为\n在测试时确定。不过就是这样。如果你把它作为一个答案,我可以接受它(作为正确的答案)。不幸的是,这不是最流行的问题……很高兴它起了作用。贴出了答案。