最近自己的做的一个项目flask_microblog里面有一个需求,就是要以api调用的形式显示用户的头像。
最初时为了简单,直接调用了Gravatr的api,就像这样。
def avatar(self):
return 'https://www.gravatar.com/avatar/6b541a0a667f5558208aad7309c22936'
后来为了实现GitHub风格的默认头像功能,就自己写了个简单的api,就像这样
@api_bp.route('/user-avatar/')
def user_avatar(email_md5):
user_avatar_dir = current_app.config['USER_AVATAR_DIR']
user_avatar_path = user_avatar_dir + email_md5 + '.png'
img = open(user_avatar_path, 'rb')
resp = Response(img, mimetype="image/png")
return resp
然后问题来了…我要怎么调用自己的api呢?
试了几种方法都没有成功
def avatar(self):
return 'localhost:5000/api/user-avatar/'
# return 'http://127.0.0.1:5000/api/user_avatar/'
最后发现正确姿势应该是使用url_for
就像这样
def avatar(self):
digest = md5(self.email.lower().encode('utf-8')).hexdigest()
return url_for('api.user_avatar', email_md5=digest)