第六章:个人主页和头像
Posted 在这里, 意淫和实干都值得尊重
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章:个人主页和头像相关的知识,希望对你有一定的参考价值。
感谢作者 –> 原文链接
本文翻译自 The Flask Mega-Tutorial Part VI: Profile Page and Avatars
这是Flask Mega-Tutorial系列的第六部分,我将告诉你如何创建个人主页。
本章将致力于为应用添加个人主页。个人主页用来展示用户的相关信息,其个人信息由本人录入。 我将为你展示如何动态地生成每个用户的主页,并提供一个编辑页面给他们来更新个人信息。
本章的GitHub链接为:Browse, Zip, Diff.
个人主页
作为创建个人主页的第一步,让我们为其URL /user/
我用来装饰该视图函数的@app.route
装饰器看起来和之前的有点不一样。 本例中被<
和>
包裹的URL <username>
是动态的。 当一个路由包含动态组件时,Flask将接受该部分URL中的任何文本,并将以实际文本作为参数调用该视图函数。 例如,如果客户端浏览器请求URL /user/susan
,则视图函数将被调用,其参数username
被设置为\'susan\'
。 因为这个视图函数只能被已登录的用户访问,所以我添加了@login_required
装饰器。
这个视图函数的实现相当简单。 我首先会尝试在数据库中以用户名来查询和加载用户。 之前你见过通过调用all()
来得到所有的结果的查询,或是调用first()
来得到结果中的第一个或者结果集为空时返回None
的查询。 在本视图函数中,我使用了first()
的变种方法,名为first_or_404()
,当有结果时它的工作方式与first()
完全相同,但是在没有结果的情况下会自动发送404 error给客户端。 以这种方式执行查询,我省去检查用户是否返回的步骤,因为当用户名不存在于数据库中时,函数将不会返回,而是会引发404异常。
如果执行数据库查询没有触发404错误,那么这意味着找到了具有给定用户名的用户。 接下来,我为这个用户初始化一个虚拟的用户动态列表,最后用传入的用户对象和用户动态列表渲染一个新的user.html模板。
user.html模板如下所示:
个人主页虽然已经完成了,但是网站上却没有一个入口链接。我将会在顶部的导航栏中添加这个入口链接,以便用户可以轻松查看自己的个人资料:
这里唯一有趣的变化是用来生成链接到个人主页的url_for()
调用。 由于个人主页视图函数接受一个动态参数,所以url_for()
函数接收一个值作为关键字参数。 由于这是一个指向当前登录个人主页的链接,我可以使用Flask-Login的current_user
对象来生成正确的URL。
尝试点击顶部的Profile
链接就能将你带到自己的个人主页。 此时,虽然没有链接来访问其他用户的主页,但是如果要访问这些页面,则可以在浏览器的地址栏中手动输入网址。 例如,如果你在应用中注册了名为“john”的用户,则可以通过在地址栏中键入http:// localhost:5000/user/john来查看该用户的个人主页。
头像
我相信你也觉得我刚刚建立的个人主页非常枯燥乏味。为了使它们更加有趣,我将添加用户头像。与其在服务器上处理大量的上传图片,我将使用Gravatar为所有用户提供图片服务。
Gravatar服务使用起来非常简单。 要请求给定用户的图片,使用格式为https://www.gravatar.com/avatar/<hash>
是用户的电子邮件地址的MD5哈希值。 在下面,你可以看到如何生成电子邮件为john@example.com
的用户的Gravatar URL:
如果你想看一个实际的例子,我自己的Gravatar URL是https://www.gravatar.com/avatar/729e26a2a2c7ff24a71958d4aa4e5f35。Gravatar返回的图片如下:
第六章.解决大问题