gpt4 book ai didi

django - 包装/装饰urls.py与views.py中的函数

转载 作者:行者123 更新时间:2023-12-04 14:05:37 27 4
gpt4 key购买 nike

因此,我对views.py中的包装函数非常熟悉。因此,如果用户已登录,我已经编写了一个装饰器以重定向到默认的REDIRECT_URL(一种反向的login_required);它基于我过去的观点:

def not_logged_in(redirect_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
def decorator(view_func, *args, **kwargs):
def wrapper(request, *args, **kwargs):
if not request.user.is_authenticated():
return view_func(*args, **kwargs)
else:
redirect_url = (request.REQUEST.get(redirect_field_name, redirect_url) or
settings.REDIRECT_URL)
return HttpResponseRedirect(redirect_url)
return wrapper
return decorator

但是,我收到以下错误: 'function' object has no attribute 'status_code',它是由MiddleWare期望HttpResponse引起的。当我查看 response的值时,我看到它是 <function wrapper at 0x2b3a9922a500>

这是我在 urls.py中调用它的方式:
url(r'login/', 
not_logged_in(auth_views.login),
{'authentication_form': LoginForm },
),

最佳答案

这是我对同一件事的实现。

def logout_required(view):
def f(request, *args, **kwargs):
if request.user.is_anonymous():
return view(request, *args, **kwargs)
return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
return f

urls.py中:
urlpatterns = patterns("",
url(r"^login/", logout_required(login), {"template_name": "users/login.html"}, "login"),
# ...

我希望这会有所帮助(尽管不确定)。

关于django - 包装/装饰urls.py与views.py中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796897/

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