使用Flask-Avatars在Flask项目里设置头像

这篇文章属于“Flask经常使用扩展介绍系列”,这个系列的文章目录索引能够在《Flask经常使用扩展介绍系列文章索引》看到。git

Flask-Avatars

大多数Web程序中都会涉及到头像的实现。不一样类型的项目,对于头像的需求不一样,有些项目能够直接使用Gravatar提供的头像服务,而有的项目则须要提供自定义头像功能。扩展Flask-Avatars几乎知足了全部常见的头像需求:github

  • 默认头像
  • Gravatar头像
  • Robohash头像
  • 社交网站头像
  • 生成随机图案头像Identicon
  • 图片裁剪头像

Flask-Avatars

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)复制代码

若是你使用工厂函数建立程序实例,那么这里也能够不传入程序实例app,在工厂函数中对这个avatars对象调用init_app()方法时再传入app实例。

默认头像

Flask-Avatars内置了几个默认头像,能够用来做为用户注册后的初始头像,或是做为博客评论者的头像。在模板中调用avatars.default()便可获取URL:app

<img src="{{ avatars.default() }}">复制代码

你能够经过size参数来设置尺寸,默认为m,其余可选值有l和s。实际的调用示例以下所示:default avataride

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()复制代码

实际的调用示例以下所示:gravatarui

Robohash

Robohash(robohash.org)是一个生成随机机器人头像的服务(目前Gravatar的默认头像中已经支持这一类型,能够经过将default参数设为robohash获取)。在模板中调用avatars.robohash()并传入随机文本做为参数便可获取Robohash的头像URL:

<img src="{{ avatars.robohash(some_text) }}">复制代码

实际的调用示例以下所示:

robohash

社交网站头像

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') }}">复制代码

实际的调用示例以下所示:

avatars.io

生成随机图案头像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)复制代码

实际生成的头像示例以下所示:identicon

裁剪头像

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复制代码

相关连接

相关文章
相关标签/搜索