|
|
|
|
@ -1,22 +1,36 @@
|
|
|
|
|
# 导入Django模板相关模块和URL反转工具
|
|
|
|
|
from django import template
|
|
|
|
|
from django.urls import reverse
|
|
|
|
|
|
|
|
|
|
# 导入获取OAuth应用列表的工具函数
|
|
|
|
|
from oauth.oauthmanager import get_oauth_apps
|
|
|
|
|
|
|
|
|
|
# 注册一个模板库实例,用于注册自定义模板标签
|
|
|
|
|
register = template.Library()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 注册一个包含型模板标签(inclusion tag),指定模板文件为'oauth/oauth_applications.html'
|
|
|
|
|
# 该标签会将处理结果传递给指定模板,再将模板渲染后的内容嵌入到调用位置
|
|
|
|
|
@register.inclusion_tag('oauth/oauth_applications.html')
|
|
|
|
|
def load_oauth_applications(request):
|
|
|
|
|
# 获取所有已配置的OAuth应用(如微博、GitHub等)
|
|
|
|
|
applications = get_oauth_apps()
|
|
|
|
|
|
|
|
|
|
if applications:
|
|
|
|
|
# 生成OAuth登录的基础URL(通过reverse反转'oauth:oauthlogin'命名URL)
|
|
|
|
|
baseurl = reverse('oauth:oauthlogin')
|
|
|
|
|
# 获取当前请求的完整路径(用于登录后跳转回原页面)
|
|
|
|
|
path = request.get_full_path()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 处理应用列表:将每个应用转换为(图标名称, 登录URL)的元组
|
|
|
|
|
# 登录URL格式为"基础URL?type=应用图标名&next_url=当前路径"
|
|
|
|
|
apps = list(map(lambda x: (x.ICON_NAME, '{baseurl}?type={type}&next_url={next}'.format(
|
|
|
|
|
baseurl=baseurl, type=x.ICON_NAME, next=path)), applications))
|
|
|
|
|
else:
|
|
|
|
|
# 若没有配置OAuth应用,返回空列表
|
|
|
|
|
apps = []
|
|
|
|
|
|
|
|
|
|
# 将处理后的应用列表传递给模板
|
|
|
|
|
return {
|
|
|
|
|
'apps': apps
|
|
|
|
|
}
|
|
|
|
|
}
|