本文整理汇总了Python中website.profile.utils.get_gravatar函数的典型用法代码示例。如果您正苦于以下问题:Python get_gravatar函数的具体用法?Python get_gravatar怎么用?Python get_gravatar使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了get_gravatar函数的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: addon_deleted_file
def addon_deleted_file(auth, node, **kwargs):
"""Shows a nice error message to users when they try to view
a deleted file
"""
# Allow file_node to be passed in so other views can delegate to this one
trashed = kwargs.get('file_node') or TrashedFileNode.load(kwargs.get('trashed_id'))
if not trashed:
raise HTTPError(httplib.NOT_FOUND, {
'message_short': 'Not Found',
'message_long': 'This file does not exist'
})
ret = serialize_node(node, auth, primary=True)
ret.update(rubeus.collect_addon_assets(node))
ret.update({
'urls': {
'render': None,
'sharejs': None,
'mfr': settings.MFR_SERVER_URL,
'gravatar': get_gravatar(auth.user, 25),
'files': node.web_url_for('collect_file_trees'),
},
'extra': {},
'size': 9966699, # Prevent file from being editted, just in case
'sharejs_uuid': None,
'file_name': trashed.name,
'file_path': trashed.path,
'provider': trashed.provider,
'materialized_path': trashed.materialized_path,
'error': FILE_GONE_ERROR_MESSAGE.format(file_name=trashed.name),
'private': getattr(node.get_addon(trashed.provider), 'is_private', False),
})
return ret, httplib.GONE
开发者ID:kms6bn,项目名称:osf.io,代码行数:34,代码来源:views.py
示例2: addon_deleted_file
def addon_deleted_file(auth, node, **kwargs):
"""Shows a nice error message to users when they try to view
a deleted file
"""
# Allow file_node to be passed in so other views can delegate to this one
trashed = kwargs.get("file_node") or TrashedFileNode.load(kwargs.get("trashed_id"))
if not trashed:
raise HTTPError(httplib.NOT_FOUND, {"message_short": "Not Found", "message_long": "This file does not exist"})
ret = serialize_node(node, auth, primary=True)
ret.update(rubeus.collect_addon_assets(node))
ret.update(
{
"urls": {
"render": None,
"sharejs": None,
"mfr": settings.MFR_SERVER_URL,
"gravatar": get_gravatar(auth.user, 25),
"files": node.web_url_for("collect_file_trees"),
},
"extra": {},
"size": 9966699, # Prevent file from being editted, just in case
"sharejs_uuid": None,
"file_name": trashed.name,
"file_path": trashed.path,
"provider": trashed.provider,
"materialized_path": trashed.materialized_path,
"error": FILE_GONE_ERROR_MESSAGE.format(file_name=trashed.name),
"private": getattr(node.get_addon(trashed.provider), "is_private", False),
}
)
return ret, httplib.GONE
开发者ID:mattspitzer,项目名称:osf.io,代码行数:33,代码来源:views.py
示例3: addon_view_file
def addon_view_file(auth, node, file_node, version):
# TODO: resolve circular import issue
from website.addons.wiki import settings as wiki_settings
if isinstance(version, tuple):
version, error = version
error = error.replace('\n', '').strip()
else:
error = None
ret = serialize_node(node, auth, primary=True)
if file_node._id + '-' + version._id not in node.file_guid_to_share_uuids:
node.file_guid_to_share_uuids[file_node._id + '-' + version._id] = uuid.uuid4()
node.save()
if ret['user']['can_edit']:
sharejs_uuid = str(node.file_guid_to_share_uuids[file_node._id + '-' + version._id])
else:
sharejs_uuid = None
download_url = furl.furl(request.url.encode('utf-8')).set(args=dict(request.args, **{
'direct': None,
'mode': 'render',
'action': 'download',
}))
render_url = furl.furl(settings.MFR_SERVER_URL).set(
path=['render'],
args={'url': download_url.url}
)
ret.update({
'urls': {
'render': render_url.url,
'mfr': settings.MFR_SERVER_URL,
'sharejs': wiki_settings.SHAREJS_URL,
'gravatar': get_gravatar(auth.user, 25),
'files': node.web_url_for('collect_file_trees'),
'archived_from': get_archived_from_url(node, file_node) if node.is_registration else None,
},
'error': error,
'file_name': file_node.name,
'file_name_title': os.path.splitext(file_node.name)[0],
'file_name_ext': os.path.splitext(file_node.name)[1],
'file_path': file_node.path,
'sharejs_uuid': sharejs_uuid,
'provider': file_node.provider,
'materialized_path': file_node.materialized_path,
'extra': version.metadata.get('extra', {}),
'size': version.size if version.size is not None else 9966699,
'private': getattr(node.get_addon(file_node.provider), 'is_private', False),
'file_tags': [tag._id for tag in file_node.tags],
'file_guid': file_node.get_guid()._id,
'file_id': file_node._id,
'allow_comments': file_node.provider in settings.ADDONS_COMMENTABLE
})
ret.update(rubeus.collect_addon_assets(node))
return ret
开发者ID:caspinelli,项目名称:osf.io,代码行数:60,代码来源:views.py
示例4: addon_view_file
def addon_view_file(auth, node, node_addon, guid_file, extras):
# TODO: resolve circular import issue
from website.addons.wiki import settings as wiki_settings
ret = serialize_node(node, auth, primary=True)
# Disable OSF Storage file deletion in DISK_SAVING_MODE
if settings.DISK_SAVING_MODE and node_addon.config.short_name == 'osfstorage':
ret['user']['can_edit'] = False
try:
guid_file.enrich()
except exceptions.AddonEnrichmentError as e:
error = e.as_html()
else:
error = None
if guid_file._id not in node.file_guid_to_share_uuids:
node.file_guid_to_share_uuids[guid_file._id] = uuid.uuid4()
node.save()
if ret['user']['can_edit']:
sharejs_uuid = str(node.file_guid_to_share_uuids[guid_file._id])
else:
sharejs_uuid = None
size = getattr(guid_file, 'size', None)
if size is None: # Size could be 0 which is a falsey value
size = 9966699 # if we dont know the size assume its to big to edit
ret.update({
'error': error.replace('\n', '') if error else None,
'provider': guid_file.provider,
'file_path': guid_file.waterbutler_path,
'panels_used': ['edit', 'view'],
'private': getattr(node_addon, 'is_private', False),
'sharejs_uuid': sharejs_uuid,
'urls': {
'files': node.web_url_for('collect_file_trees'),
'render': guid_file.mfr_render_url,
'sharejs': wiki_settings.SHAREJS_URL,
'mfr': settings.MFR_SERVER_URL,
'gravatar': get_gravatar(auth.user, 25),
'external': getattr(guid_file, 'external_url', None)
},
# Note: must be called after get_or_start_render. This is really only for github
'size': size,
'extra': getattr(guid_file, 'extra', {}),
#NOTE: get_or_start_render must be called first to populate name
'file_name': getattr(guid_file, 'name', os.path.split(guid_file.waterbutler_path)[1]),
'materialized_path': getattr(guid_file, 'materialized', guid_file.waterbutler_path),
})
ret.update(rubeus.collect_addon_assets(node))
return ret
开发者ID:XTech2K,项目名称:osf.io,代码行数:55,代码来源:views.py
示例5: addon_view_file
def addon_view_file(auth, node, file_node, version):
# TODO: resolve circular import issue
from website.addons.wiki import settings as wiki_settings
if isinstance(version, tuple):
version, error = version
error = error.replace("\n", "").strip()
else:
error = None
ret = serialize_node(node, auth, primary=True)
if file_node._id not in node.file_guid_to_share_uuids:
node.file_guid_to_share_uuids[file_node._id] = uuid.uuid4()
node.save()
if ret["user"]["can_edit"]:
sharejs_uuid = str(node.file_guid_to_share_uuids[file_node._id])
else:
sharejs_uuid = None
download_url = furl.furl(request.url.encode("utf-8")).set(
args=dict(request.args, **{"direct": None, "mode": "render", "action": "download"})
)
render_url = furl.furl(settings.MFR_SERVER_URL).set(path=["render"], args={"url": download_url.url})
ret.update(
{
"urls": {
"render": render_url.url,
"mfr": settings.MFR_SERVER_URL,
"sharejs": wiki_settings.SHAREJS_URL,
"gravatar": get_gravatar(auth.user, 25),
"files": node.web_url_for("collect_file_trees"),
},
"error": error,
"file_name": file_node.name,
"file_name_title": os.path.splitext(file_node.name)[0],
"file_name_ext": os.path.splitext(file_node.name)[1],
"file_path": file_node.path,
"sharejs_uuid": sharejs_uuid,
"provider": file_node.provider,
"materialized_path": file_node.materialized_path,
"extra": version.metadata.get("extra", {}),
"size": version.size if version.size is not None else 9966699,
"private": getattr(node.get_addon(file_node.provider), "is_private", False),
"file_tags": [tag._id for tag in file_node.tags],
}
)
ret.update(rubeus.collect_addon_assets(node))
return ret
开发者ID:mattspitzer,项目名称:osf.io,代码行数:53,代码来源:views.py
示例6: addon_deleted_file
def addon_deleted_file(auth, node, **kwargs):
"""Shows a nice error message to users when they try to view
a deleted file
"""
# Allow file_node to be passed in so other views can delegate to this one
trashed = kwargs.get('file_node') or TrashedFileNode.load(kwargs.get('trashed_id'))
if not trashed:
raise HTTPError(httplib.NOT_FOUND, {
'message_short': 'Not Found',
'message_long': 'This file does not exist'
})
ret = serialize_node(node, auth, primary=True)
ret.update(rubeus.collect_addon_assets(node))
error_template = FILE_SUSPENDED_ERROR_MESSAGE if getattr(trashed, 'suspended', False) else FILE_GONE_ERROR_MESSAGE
error = error_template.format(file_name=trashed.name)
ret.update({
'urls': {
'render': None,
'sharejs': None,
'mfr': settings.MFR_SERVER_URL,
'gravatar': get_gravatar(auth.user, 25),
'files': node.web_url_for('collect_file_trees'),
},
'extra': {},
'size': 9966699, # Prevent file from being editted, just in case
'sharejs_uuid': None,
'file_name': trashed.name,
'file_path': trashed.path,
'provider': trashed.provider,
'materialized_path': trashed.materialized_path,
'error': error,
'private': getattr(node.get_addon(trashed.provider), 'is_private', False),
'file_id': trashed._id,
# For the off chance that there is no GUID
'file_guid': getattr(trashed.get_guid(create=False), '_id', None),
'file_tags': [tag._id for tag in trashed.tags],
'file_name_ext': os.path.splitext(trashed.name)[1],
'file_name_title': os.path.splitext(trashed.name)[0],
'allow_comments': trashed.provider in settings.ADDONS_COMMENTABLE,
})
return ret, httplib.GONE
开发者ID:545zhou,项目名称:osf.io,代码行数:45,代码来源:views.py
示例7: project_wiki_view
#.........这里部分代码省略.........
and not node.is_registration
and (
node.has_permission(auth.user, 'write')
or wiki_settings.is_publicly_editable
)
)
versions = _get_wiki_versions(node, wiki_name, anonymous=anonymous)
# Determine panels used in view
panels = {'view', 'edit', 'compare', 'menu'}
if request.args and set(request.args).intersection(panels):
panels_used = [panel for panel in request.args if panel in panels]
num_columns = len(set(panels_used).intersection({'view', 'edit', 'compare'}))
if num_columns == 0:
panels_used.append('view')
num_columns = 1
else:
panels_used = ['view', 'menu']
num_columns = 1
try:
view = wiki_utils.format_wiki_version(
version=request.args.get('view'),
num_versions=len(versions),
allow_preview=True,
)
compare = wiki_utils.format_wiki_version(
version=request.args.get('compare'),
num_versions=len(versions),
allow_preview=False,
)
except InvalidVersionError:
raise WIKI_INVALID_VERSION_ERROR
# Default versions for view and compare
version_settings = {
'view': view or ('preview' if 'edit' in panels_used else 'current'),
'compare': compare or 'previous',
}
# ensure home is always lower case since it cannot be renamed
if wiki_name.lower() == 'home':
wiki_name = 'home'
if wiki_page:
version = wiki_page.version
is_current = wiki_page.is_current
content = wiki_page.html(node)
use_python_render = wiki_page.rendered_before_update
else:
version = 'NA'
is_current = False
content = ''
use_python_render = False
if can_edit:
if wiki_key not in node.wiki_private_uuids:
wiki_utils.generate_private_uuid(node, wiki_name)
sharejs_uuid = wiki_utils.get_sharejs_uuid(node, wiki_name)
else:
if wiki_key not in node.wiki_pages_current and wiki_key != 'home':
raise WIKI_PAGE_NOT_FOUND_ERROR
if 'edit' in request.args:
if wiki_settings.is_publicly_editable:
raise HTTPError(http.UNAUTHORIZED)
raise HTTPError(http.FORBIDDEN)
sharejs_uuid = None
# Opens 'edit' panel when home wiki is empty
if not content and can_edit and wiki_name == 'home':
panels_used.append('edit')
ret = {
'wiki_id': wiki_page._primary_key if wiki_page else None,
'wiki_name': wiki_page.page_name if wiki_page else wiki_name,
'wiki_content': content,
'use_python_render': use_python_render,
'page': wiki_page,
'version': version,
'versions': versions,
'sharejs_uuid': sharejs_uuid or '',
'sharejs_url': settings.SHAREJS_URL,
'is_current': is_current,
'version_settings': version_settings,
'pages_current': _get_wiki_pages_current(node),
'category': node.category,
'panels_used': panels_used,
'num_columns': num_columns,
'urls': {
'api': _get_wiki_api_urls(node, wiki_name, {
'content': node.api_url_for('wiki_page_content', wname=wiki_name),
'draft': node.api_url_for('wiki_page_draft', wname=wiki_name),
}),
'web': _get_wiki_web_urls(node, wiki_name),
'gravatar': get_gravatar(auth.user, 25),
},
}
ret.update(_view_project(node, auth, primary=True))
ret['user']['can_edit_wiki_body'] = can_edit
return ret
开发者ID:545zhou,项目名称:osf.io,代码行数:101,代码来源:views.py
示例8: get_gravatar
def get_gravatar(uid, size=None):
return {"gravatar_url": profile_utils.get_gravatar(User.load(uid), size=size)}
开发者ID:cwisecarver,项目名称:osf.io,代码行数:2,代码来源:views.py
示例9: addon_deleted_file
def addon_deleted_file(auth, node, error_type='BLAME_PROVIDER', **kwargs):
"""Shows a nice error message to users when they try to view a deleted file
"""
# Allow file_node to be passed in so other views can delegate to this one
file_node = kwargs.get('file_node') or TrashedFileNode.load(kwargs.get('trashed_id'))
deleted_by, deleted_on = None, None
if isinstance(file_node, TrashedFileNode):
deleted_by = file_node.deleted_by
deleted_by_guid = file_node.deleted_by._id if deleted_by else None
deleted_on = file_node.deleted_on.strftime('%c') + ' UTC'
if file_node.suspended:
error_type = 'FILE_SUSPENDED'
elif file_node.deleted_by is None:
if file_node.provider == 'osfstorage':
error_type = 'FILE_GONE_ACTOR_UNKNOWN'
else:
error_type = 'BLAME_PROVIDER'
else:
error_type = 'FILE_GONE'
else:
error_type = 'DONT_KNOW'
file_path = kwargs.get('path', file_node.path)
file_name = file_node.name or os.path.basename(file_path)
file_name_title, file_name_ext = os.path.splitext(file_name)
provider_full = settings.ADDONS_AVAILABLE_DICT[file_node.provider].full_name
try:
file_guid = file_node.get_guid()._id
except AttributeError:
file_guid = None
format_params = dict(
file_name=markupsafe.escape(file_name),
deleted_by=markupsafe.escape(deleted_by),
deleted_on=markupsafe.escape(deleted_on),
provider=markupsafe.escape(provider_full)
)
if deleted_by:
format_params['deleted_by_guid'] = markupsafe.escape(deleted_by_guid)
ret = serialize_node(node, auth, primary=True)
ret.update(rubeus.collect_addon_assets(node))
ret.update({
'error': ERROR_MESSAGES[error_type].format(**format_params),
'urls': {
'render': None,
'sharejs': None,
'mfr': settings.MFR_SERVER_URL,
'gravatar': get_gravatar(auth.user, 25),
'files': node.web_url_for('collect_file_trees'),
},
'extra': {},
'size': 9966699, # Prevent file from being edited, just in case
'sharejs_uuid': None,
'file_name': file_name,
'file_path': file_path,
'file_name_title': file_name_title,
'file_name_ext': file_name_ext,
'version_id': None,
'file_guid': file_guid,
'file_id': file_node._id,
'provider': file_node.provider,
'materialized_path': file_node.materialized_path or file_path,
'private': getattr(node.get_addon(file_node.provider), 'is_private', False),
'file_tags': [tag._id for tag in file_node.tags],
'allow_comments': file_node.provider in settings.ADDONS_COMMENTABLE,
})
return ret, httplib.GONE
开发者ID:baylee-d,项目名称:osf.io,代码行数:70,代码来源:views.py
示例10: project_wiki_view
def project_wiki_view(auth, wname, path=None, **kwargs):
node = kwargs["node"] or kwargs["project"]
anonymous = has_anonymous_link(node, auth)
wiki_name = (wname or "").strip()
wiki_key = to_mongo_key(wiki_name)
wiki_page = node.get_wiki_page(wiki_name)
wiki_settings = node.get_addon("wiki")
can_edit = (
auth.logged_in
and not node.is_registration
and (node.has_permission(auth.user, "write") or wiki_settings.is_publicly_editable)
)
versions = _get_wiki_versions(node, wiki_name, anonymous=anonymous)
# Determine panels used in view
panels = {"view", "edit", "compare", "menu"}
if request.args and set(request.args).intersection(panels):
panels_used = [panel for panel in request.args if panel in panels]
num_columns = len(set(panels_used).intersection({"view", "edit", "compare"}))
if num_columns == 0:
panels_used.append("view")
num_columns = 1
else:
panels_used = ["view", "menu"]
num_columns = 1
try:
view = wiki_utils.format_wiki_version(
version=request.args.get("view"), num_versions=len(versions), allow_preview=True
)
compare = wiki_utils.format_wiki_version(
version=request.args.get("compare"), num_versions=len(versions), allow_preview=False
)
except InvalidVersionError:
raise WIKI_INVALID_VERSION_ERROR
# Default versions for view and compare
version_settings = {
"view": view or ("preview" if "edit" in panels_used else "current"),
"compare": compare or "previous",
}
# ensure home is always lower case since it cannot be renamed
if wiki_name.lower() == "home":
wiki_name = "home"
if wiki_page:
version = wiki_page.version
is_current = wiki_page.is_current
content = wiki_page.html(node)
use_python_render = wiki_page.rendered_before_update
else:
version = "NA"
is_current = False
content = ""
use_python_render = False
if can_edit:
if wiki_key not in node.wiki_private_uuids:
wiki_utils.generate_private_uuid(node, wiki_name)
sharejs_uuid = wiki_utils.get_sharejs_uuid(node, wiki_name)
else:
if wiki_key not in node.wiki_pages_current and wiki_key != "home":
raise WIKI_PAGE_NOT_FOUND_ERROR
if "edit" in request.args:
if wiki_settings.is_publicly_editable:
raise HTTPError(http.UNAUTHORIZED)
raise HTTPError(http.FORBIDDEN)
sharejs_uuid = None
ret = {
"wiki_id": wiki_page._primary_key if wiki_page else None,
"wiki_name": wiki_page.page_name if wiki_page else wiki_name,
"wiki_content": content,
"use_python_render": use_python_render,
"page": wiki_page,
"version": version,
"versions": versions,
"sharejs_uuid": sharejs_uuid or "",
"sharejs_url": settings.SHAREJS_URL,
"is_current": is_current,
"version_settings": version_settings,
"pages_current": _get_wiki_pages_current(node),
"category": node.category,
"panels_used": panels_used,
"num_columns": num_columns,
"urls": {
"api": _get_wiki_api_urls(
node,
wiki_name,
{
"content": node.api_url_for("wiki_page_content", wname=wiki_name),
"draft": node.api_url_for("wiki_page_draft", wname=wiki_name),
},
),
"web": _get_wiki_web_urls(node, wiki_name),
"gravatar": get_gravatar(auth.user, 25),
},
}
ret.update(_view_project(node, auth, primary=True))
#.........这里部分代码省略.........
开发者ID:rdhyee,项目名称:osf.io,代码行数:101,代码来源:views.py
示例11: test_get_other_user_gravatar_specific_size
def test_get_other_user_gravatar_specific_size(self):
gravitar = profile_utils.get_gravatar(self.user, size=25)
assert_true(gravitar)
开发者ID:adlius,项目名称:osf.io,代码行数:3,代码来源:test_utils.py
示例12: test_get_other_user_gravatar_default_size
def test_get_other_user_gravatar_default_size(self):
gravitar = profile_utils.get_gravatar(self.user)
assert_true(gravitar)
开发者ID:adlius,项目名称:osf.io,代码行数:3,代码来源:test_utils.py
示例13: get_globals
def get_globals():
"""Context variables that are available for every template rendered by
OSFWebRenderer.
"""
user = _get_current_user()
user_institutions = [{'id': inst._id, 'name': inst.name, 'logo_path': inst.logo_path_rounded_corners} for inst in user.affiliated_institutions.all()] if user else []
location = geolite2.lookup(request.remote_addr) if request.remote_addr else None
if request.host_url != settings.DOMAIN:
try:
inst_id = (Institution.find_one(Q('domains', 'eq', request.host.lower())))._id
request_login_url = '{}institutions/{}'.format(settings.DOMAIN, inst_id)
except NoResultsFound:
request_login_url = request.url.replace(request.host_url, settings.DOMAIN)
else:
request_login_url = request.url
return {
'private_link_anonymous': is_private_link_anonymous_view(),
'user_name': user.username if user else '',
'user_full_name': user.fullname if user else '',
'user_id': user._id if user else '',
'user_locale': user.locale if user and user.locale else '',
'user_timezone': user.timezone if user and user.timezone else '',
'user_url': user.url if user else '',
'user_gravatar': get_gravatar(user=user, size=25) if user else '',
'user_email_verifications': user.unconfirmed_email_info if user else [],
'user_api_url': user.api_url if user else '',
'user_entry_point': metrics.get_entry_point(user) if user else '',
'user_institutions': user_institutions if user else None,
'display_name': get_display_name(user.fullname) if user else '',
'anon': {
'continent': getattr(location, 'continent', None),
'country': getattr(location, 'country', None),
},
'use_cdn': settings.USE_CDN_FOR_CLIENT_LIBS,
'sentry_dsn_js': settings.SENTRY_DSN_JS if sentry.enabled else None,
'dev_mode': settings.DEV_MODE,
'allow_login': settings.ALLOW_LOGIN,
'cookie_name': settings.COOKIE_NAME,
'status': status.pop_status_messages(),
'prev_status': status.pop_previous_status_messages(),
'domain': settings.DOMAIN,
'api_domain': settings.API_DOMAIN,
'disk_saving_mode': settings.DISK_SAVING_MODE,
'language': language,
'noteworthy_links_node': settings.NEW_AND_NOTEWORTHY_LINKS_NODE,
'popular_links_node': settings.POPULAR_LINKS_NODE,
'web_url_for': util.web_url_for,
'api_url_for': util.api_url_for,
'api_v2_url': util.api_v2_url, # URL function for templates
'api_v2_base': util.api_v2_url(''), # Base url used by JS api helper
'sanitize': sanitize,
'sjson': lambda s: sanitize.safe_json(s),
'webpack_asset': paths.webpack_asset,
'waterbutler_url': settings.WATERBUTLER_URL,
'login_url': cas.get_login_url(request_login_url),
'reauth_url': util.web_url_for('auth_logout', redirect_url=request.url, reauth=True),
'profile_url': cas.get_profile_url(),
'enable_institutions': settings.ENABLE_INSTITUTIONS,
'keen': {
'public': {
'project_id': settings.KEEN['public']['project_id'],
'write_key': settings.KEEN['public']['write_key'],
},
'private': {
'project_id': settings.KEEN['private']['project_id'],
'write_key': settings.KEEN['private']['write_key'],
},
},
'maintenance': maintenance.get_maintenance(),
'recaptcha_site_key': settings.RECAPTCHA_SITE_KEY,
'custom_citations': settings.CUSTOM_CITATIONS
}
开发者ID:adlius,项目名称:osf.io,代码行数:72,代码来源:routes.py
注:本文中的website.profile.utils.get_gravatar函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论