本文将增加用户的profile页。profile页一般是用户自己提交的关于自己的信息,比如头像,生日等等。本文将为所有用户动态生成profile页,并允许用户自己编辑。这里头像使用Gravatar提供的服务,这样我们的应用就不需要自己储存用户的头像图片,可以极大节省我们自己的应用所占的空间,对小应用来说非常推荐。
下面的代码用来创建profile页,并映射到/user/
简单解释一下:@app.route声明了一个动态URL,即username是个变量,它由函数user的入参决定。user是从数据库中根据用户名查询到该用户的记录,然后创建两个post,用于测试使用。真正的实现时,需要通过user来查询它的post内容,这部分以后再实现。@login_required前一篇文章刚介绍过,表面该页面必须再用户登录之后才能显示。first_or_404()在能查询到用户时与first()的功能一样,当查询不到用户时,返回404 err页面。
根据上述代码,我们应该添加一个模板user.html。
另外,我们可以添加一个链接,这样用户才可以访问到profile页。
通过上述几行代码,profile页面就实现了。但是都是些文本信息,我们需要加入头像。一种方法是在服务器上储存用户提交的大量图片,另一种方法是使用Gravatar服务来给用户提供图片。Gravatar服务很容易使用。当为一个用户请求图片时,URL使用这样的格式:https://www.gravatar.com/avatar/
>>> 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.
由于头像是与用户相关的,我们就必须添加产生头像的代码。
生成了图片之后,就需要把该图片显示在profile页面上,如下所示:
閱讀更多 小輝算個球 的文章