6

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

 3 years ago
source link: https://greyli.com/flask-avatars/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Flask-Avatars

大多数Web程序中都会涉及到头像的实现。不同类型的项目,对于头像的需求不同,有些项目可以直接使用Gravatar提供的头像服务,而有的项目则需要提供自定义头像设置。扩展Flask-Avatars几乎满足了所有常见的头像需求:

  • Gravatar头像
  • Robohash头像
  • 社交网站头像
  • 生成随机图案头像Identicon
  • 图片裁剪头像
Flask-Avatars

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。实际的调用示例如下所示:

default avatar

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()

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

gravatar

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK