gpt4 book ai didi

django - psa 装饰器的用途是什么,我们如何使用它?

转载 作者:行者123 更新时间:2023-12-05 04:16:11 26 4
gpt4 key购买 nike

我在 Django 项目中使用 python-social-auth 已经有几个星期了。现在我到了需要从 View (即,不是通过 social:begin 等模板标签)和 the documentation 验证用户身份的地步。使用 social.apps.django_app.utils 中的 psa() 装饰器。

我找不到任何可以清楚地解释 psa 装饰器应该做什么的东西以及来自 omab/python-social-auth 的来源。不提供任何评论。

谁能解释一下:

  1. psa 装饰器究竟应该做什么?
  2. 当我使用它根据前端(可能来自任何社交网络,如 Facebook)检索到的访问 token 对用户进行身份验证时,幕后会发生什么?

最佳答案

这是 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

作为装饰器,它增强了它所装饰的功能。

它做了三件事:

  1. 设置 request.social_strategy(此对象特定于框架,例如 Django)。
  2. 根据传入的后端字符串参数(例如“facebook”)设置 request.backend(此对象特定于授权后端,例如 Facebook)。
  3. 提供重定向 URI 或 URI 名称(然后“反转”以获取 URI)并将 URI 传递到后端,以便它知道在时机成熟时重定向到何处。

装饰函数可以方便的访问request.social_strategy 和request.backend 并且知道它们会被设置。有关 Strategy 的更多信息,请参阅 Python Social Auth 文档。和 Backend是为了。

关于django - psa 装饰器的用途是什么,我们如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626718/

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