Flask调用自己定义的api

最近自己的做的一个项目flask_microblog里面有一个需求,就是要以api调用的形式显示用户的头像。

最初时为了简单,直接调用了Gravatr的api,就像这样。

1
2
def avatar(self):
return 'https://www.gravatar.com/avatar/6b541a0a667f5558208aad7309c22936'

后来为了实现GitHub风格的默认头像功能,就自己写了个简单的api,就像这样

1
2
3
4
5
6
7
@api_bp.route('/user-avatar/<email_md5>')
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呢?

试了几种方法都没有成功

1
2
3
def avatar(self):
return 'localhost:5000/api/user-avatar/<email md5 here>'
# return 'http://127.0.0.1:5000/api/user_avatar/<email md5 here>'

最后发现正确姿势应该是使用url_for

就像这样

1
2
3
def avatar(self):
digest = md5(self.email.lower().encode('utf-8')).hexdigest()
return url_for('api.user_avatar', email_md5=digest)