学习python flask之七:使用Gravatar给profile页添加头像

本文将增加用户的profile页。profile页一般是用户自己提交的关于自己的信息,比如头像,生日等等。本文将为所有用户动态生成profile页,并允许用户自己编辑。这里头像使用Gravatar提供的服务,这样我们的应用就不需要自己储存用户的头像图片,可以极大节省我们自己的应用所占的空间,对小应用来说非常推荐。


下面的代码用来创建profile页,并映射到/user/的URL上。

学习python flask之七:使用Gravatar给profile页添加头像

简单解释一下:@app.route声明了一个动态URL,即username是个变量,它由函数user的入参决定。user是从数据库中根据用户名查询到该用户的记录,然后创建两个post,用于测试使用。真正的实现时,需要通过user来查询它的post内容,这部分以后再实现。@login_required前一篇文章刚介绍过,表面该页面必须再用户登录之后才能显示。first_or_404()在能查询到用户时与first()的功能一样,当查询不到用户时,返回404 err页面。

根据上述代码,我们应该添加一个模板user.html。

学习python flask之七:使用Gravatar给profile页添加头像

另外,我们可以添加一个链接,这样用户才可以访问到profile页。

学习python flask之七:使用Gravatar给profile页添加头像

通过上述几行代码,profile页面就实现了。但是都是些文本信息,我们需要加入头像。一种方法是在服务器上储存用户提交的大量图片,另一种方法是使用Gravatar服务来给用户提供图片。Gravatar服务很容易使用。当为一个用户请求图片时,URL使用这样的格式:https://www.gravatar.com/avatar/; 这里hash是对用户的email地址进行MD5哈希计算的结果。

>>> from hashlib import md5

>>> 'https://www.gravatar.com/avatar/'; + md5(b'[email protected]').hexdigest()

'https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6'; #这就是返回的结果。

这样做的好处是服务器不需要存储图片,缺点就是延长了网页的响应时间,特别在网络环境较差时。

一般来说gravatar返回的图片是80*80尺寸的,如果想返回其他尺寸的,需要添加s参数。例如https://www.gravatar.com/avatar/729e26a2a2c7ff24a71958d4aa4e5f35?s=128.

由于头像是与用户相关的,我们就必须添加产生头像的代码。

学习python flask之七:使用Gravatar给profile页添加头像

生成了图片之后,就需要把该图片显示在profile页面上,如下所示:

学习python flask之七:使用Gravatar给profile页添加头像


分享到:


相關文章: