Flask-Avatars
大多数Web程序中都会涉及到头像的实现。不同类型的项目,对于头像的需求不同,有些项目可以直接使用Gravatar提供的头像服务,而有的项目则需要提供自定义头像设置。扩展Flask-Avatars几乎满足了所有常见的头像需求:
- 默认头像
- Gravatar头像
- Robohash头像
- 社交网站头像
- 生成随机图案头像Identicon
- 图片裁剪头像
GitHub主页:https://github.com/greyli/flask-avatars
安装与初始化
使用pip安装:
$ pip install flask-avatars
像其他扩展类似,你需要实例化从flask_avatars导入的Avatars类,并传入app实例:
from flask_avatars import Avatars app = Flask(__name__) avatars = Avatars(app)
如果你使用工厂函数创建程序实例,那么这里也可以不传入程序实例app,在工厂函数中对这个avatars对象调用init_app()方法时再传入app实例。
默认头像
Flask-Avatars内置了几个默认头像,可以用来作为用户注册后的初始头像,或是作为博客评论者的头像。在模板中调用avatars.default()即可获取URL:
<img src="{{ avatars.default() }}">
你可以通过size参数来设置尺寸,默认为m,其他可选值有l和s。实际的调用示例如下所示:
Gravatar
在模板中调用avatars.gravatar()方法并传入Email散列值即可获取Gravatar(gravatar.com)的头像URL:
<img src="{{ avatars.gravatar(email_hash) }}">
Email散列值可以通过下面的方式获取:
import hashlib avatar_hash = hashlib.md5(my_email.lower().encode('utf-8')).hexdigest()
Robohash
Robohash(robohash.org)是一个生成随机机器人头像的服务(目前Gravatar的默认头像中已经支持这一类型,可以通过将default参数设为robohash获取)。在模板中调用avatars.robohash()并传入随机文本作为参数即可获取Robohash的头像URL:
<img src="{{ avatars.robohash(some_text) }}">
实际的调用示例如下所示:
社交网站头像
Flask-Avatars通过Avatars.io提供了社交头像获取服务,目前支持Facebook、Twitter、Instagram和Gravatar。通过在模板中调用avatars.social_media()方法并传入用户名(username)即可获取对应的头像URL,通过size参数可以设置尺寸,可选值为small、medium和large:
<img src="{{ avatars.social_media(username) }}">
通过platform参数可以设置平台,默认为twitter,可选值为twitter、facebook、instagram和gravatar:
<img src="{{ avatars.social_media(username, platform='facebook') }}">
实际的调用示例如下所示:
生成随机图案头像Identicon
Gravatar服务可能会有不稳定的情况,这种情况下,你可以在本地为用户生成头像(identicon),下面是一个简单的示例:
app.config['AVATARS_SAVE_PATH '] = 'the/path/to/save/avatar' avatar = Identicon() filenames = avatar.generate(text=‘一串唯一字符’)
avatar.generate()会根据传入的随机字符创建三个尺寸(可以通过配置变量AVATARS_SIZE_TUPLE自定义)的头像,保存到指定的位置,并返回三个头像文件名。你可以将这个文件名保存到数据库中,并创建一个视图函数来提供头像文件:
from flask import send_form_directory, current_app @app.route('/avatars/<path:filename>') def get_avatar(filename): return send_from_directory(current_app.config['AVATARS_SAVE_PATH'], filename)
裁剪头像
Flask-Avatars基于Jcrop提供了头像裁剪功能,具体步骤可以参考文档中的相关部分。下面是示例程序中的裁剪页面:
配置
Flask-Avatars支持的配置列表如下所示:
配置 | 默认值 | 说明 |
---|---|---|
AVATARS_GRAVATAR_DEFAULT | identicon | Gravatar默认头像类型 |
AVATARS_SAVE_PATH | None |
头像保存路径 |
AVATARS_SIZE_TUPLE | (30, 60, 150) |
头像尺寸三元素元组,格式为 (small, medium, large) ,用于生成identicon头像和裁剪头像 |
AVATARS_IDENTICON_COLS | 7 | Identicon头像一行的色块数量 |
AVATARS_IDENTICON_ROWS | 7 | Identicon头像一列的色块数量 |
AVATARS_IDENTICON_BG | None |
Identicaon头像的背景颜色,传入RGB元组,比如(125, 125, 125) 。默认使用随机颜色 |
AVATARS_CROP_BASE_WIDTH | 500 | 裁剪图片的显示宽度 |
AVATARS_CROP_INIT_POS | (0, 0) | 裁剪框起始位置,两元素元组(x, y),默认为左上角 |
AVATARS_CROP_INIT_SIZE | None | 裁剪框的尺寸,默认为尺寸元组中设置的l尺寸大小,即AVATARS_SIZE_TUPLE[0] |
AVATARS_CROP_MIN_SIZE | None | 裁剪框的限制最小尺寸,默认无限制 |
AVATARS_CROP_PREVIEW_SIZE | None | 预览窗口的尺寸,默认为尺寸元组中设置的m尺寸大小,即AVATARS_SIZE_TUPLE[1] |
AVATARS_SERVE_LOCAL | False | 是否从本地加载Jcrop资源,默认从CDN加载 |
示例程序
Flask-Avatars的Git仓库中包含三个实例程序,也就是文中的截图对应的程序:
- examples/basic —— 基本示例
- examples/identicon —— Identicon示例
- examples/crop —— 裁剪示例
你可以通过下面的方式来运行实例程序:
$ git clone https://github.com/greyli/flask-avatars.git $ cd flask-avatars/examples $ pip install flask flask-avatars $ cd basic # 切换到identicon和crop目录可以运行对应的示例程序 $ flask run
这篇文章属于“Flask常用扩展介绍系列”,这个系列的文章目录索引可以在《Flask常用扩展介绍系列文章索引》看到。
相关链接
- GitHub主页:https://github.com/greyli/flask-avatars
- Flask常用扩展介绍系列文章索引:http://greyli.com/flask-extensions/
- Gravatar头像API:https://en.gravatar.com/site/implement/images/