这篇文章属于“Flask经常使用扩展介绍系列”,这个系列的文章目录索引能够在《Flask经常使用扩展介绍系列文章索引》看到。git
大多数Web程序中都会涉及到头像的实现。不一样类型的项目,对于头像的需求不一样,有些项目能够直接使用Gravatar提供的头像服务,而有的项目则须要提供自定义头像功能。扩展Flask-Avatars几乎知足了全部常见的头像需求:github
GitHub主页:github.com/greyli/flas…数据库
使用pip安装:flask
$ pip install flask-avatars复制代码
像其余扩展相似,你须要实例化从flask_avatars导入的Avatars类,并传入app实例:bash
from flask_avatars import Avatars
app = Flask(__name__)
avatars = Avatars(app)复制代码
Flask-Avatars内置了几个默认头像,能够用来做为用户注册后的初始头像,或是做为博客评论者的头像。在模板中调用avatars.default()便可获取URL:app
<img src="{{ avatars.default() }}">复制代码
你能够经过size参数来设置尺寸,默认为m,其余可选值有l和s。实际的调用示例以下所示:ide
在模板中调用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.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') }}">复制代码
实际的调用示例以下所示:
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仓库中包含三个实例程序,也就是文中的截图对应的程序:
你能够经过下面的方式来运行实例程序:
$ git clone https://github.com/greyli/flask-avatars.git
$ cd flask-avatars/examples
$ pip install flask flask-avatars
$ cd basic # 切换到identicon和crop目录能够运行对应的示例程序
$ flask run复制代码