我在Django项目中使用python-social-auth
几周。现在我已经达到了我需要从视图中验证用户的位置(即,不是通过social:begin
等模板标记)和the documentation使用来自psa()
装饰器的social.apps.django_app.utils
。
我无法找到任何清楚解释psa
装饰者应该做什么的内容,omab/python-social-auth的来源不提供任何评论。
任何人都可以解释:
psa
装饰师究竟应该做什么?答案 0 :(得分:1)
这里是psa的代码(来自here):
def psa(redirect_uri=None, load_strategy=load_strategy):
def decorator(func):
@wraps(func)
def wrapper(request, backend, *args, **kwargs):
uri = redirect_uri
if uri and not uri.startswith('/'):
uri = reverse(redirect_uri, args=(backend,))
request.social_strategy = load_strategy(request)
# backward compatibility in attribute name, only if not already
# defined
if not hasattr(request, 'strategy'):
request.strategy = request.social_strategy
try:
request.backend = load_backend(request.social_strategy,
backend, uri)
except MissingBackend:
raise Http404('Backend not found')
return func(request, backend, *args, **kwargs)
return wrapper
return decorator
作为装饰者,它增强了它装饰的功能。
它做了三件事: