10.1 用户资料信息(个人基本资料)
1. 在app/models.py
中增加用户信息字段:
|
|
db.String()
和db.Text()
的区别是db.Text()
不用指定最大长度。db.Column()
中的default
参数可以接受函数名作为默认值,所以datetime.utcnow
后面没有()
。
2. 在app/models.py
中增加刷新用户最后访问时间功能:
|
|
3. 在app/auth/views.py
中更新已登录用户的最后访问时间:
用户每次访问网站后,last_seen
字段都需要进行更新,在每次请求前进行更新,可以满足这个需求。
|
|
10.2 用户资料页面
1. 在app/main/views.py
中定义用户资料页面路由:
|
|
2. 在app/templates/user.html
编写用户资料页面模板:
|
|
3. 在app/templates/base.html
导航条中添加一个链接访问用户自己的资料页面:
|
|
10.3 用户资料编辑器
用户资料编辑分两种情况:(1)用户自己进入一个页面编辑自己的资料。(2)管理员能够编辑任意用户的资料,不仅包括用户的个人信息,而且还包括普通用户不能直接访问的User模型的字段,如用户角色等。
10.3.1 普通用户级别的资料编辑器
1. 在app/main/forms.py
中添加普通用户用的资料编辑表单:
|
|
注意:这个表单中所有字段都是可选的, 因此长度验证函数的长度允许为零。
2. 在app/main/views.py
中定义普通用户进行资料编辑的路由:
|
|
3. 在app/templates/user.html
中添加普通用户用的编辑资料的链接:
|
|
注意:链接外层的条件语句可以确保只有当用户查看自己的资料页面时才显示这个编辑个人资料的链接。
10.3.2 管理员级别的资料编辑器
1. 在app/main/forms.py
中添加管理员用的资料编辑表单:
|
|
SelectFiled()
可以实现下拉列表,可用它来选择用户角色。SelectFiled
实例必须在其choices
属性中设置可选选项,选项必须是由一个个元组组成的列表,各元组包含两个元素(选项的标识符和显示在控件中的文本字符串)。该例中,远足的标识符是角色的id,因为这个id是整数,所以添加coerce=int
参数,从而把字段的值(字符串形式)转换为整数,从而保证这个字段的data
属性值是整数。email
和username
都定义了自定义函数:验证这两个字段时,首先检查字段的值是否发生改变,如果发生改变,就要保证新值不和其他用户的相应字段重复;如果没有发生变化,则跳过该验证。
2. 在app/main/views.py
中定义管理员进行资料编辑的路由:
|
|
- 该例中,要进行编辑的用户由
id
指定,因此可以使用Flask-SQLAlchemy提供的get_or_404()
函数,如果提供的id
不正确,则返回404
错误。 - 将
user.role_id
赋值给form.role.data
是因为步骤1中choices
属性设置的元组列表使用数字标识符表示各选项。 - 提交表单后,角色
id
从form.role.data
中获取,并通过Role.query.get()
方法加载角色对象。
3. 在app/templates/user.html
中添加管理员用的资料编辑链接:
|
|
10.4 用户头像(使网站支持Gravatar提供的用户头像)
Gravatar可以把头像和电子邮件地址关联起来,使得你在支持Gravatar服务的网站中只需要头像URL就能显示你的头像(网站没有头像功能也能显示用户头像,只要网站支持Gravatar)。
头像URL由https://secure.gravatar.com/avatar/
+电子邮件地址的MD5散列值
组成。在浏览器地址栏输入该URL就会看到某电子邮件对应的头像(前提是到http://gravatar.com
中注册账户并上传头像),如果没有对应的头像,则会显示一个默认图片。
头像URL的查询字符串可以包含多个参数,以此配置头像图片的特征(如像素大小等),可设参数如表10-1所示:
表10-1 Gravatar查询字符串参数
参数名 | 说明 |
---|---|
s | 图片大小,单位是像素 |
r | 图片级别(有没有暴力倾向等)。可选值有'g' 、'pg' 、'r' 和'x' |
d | 没有注册Gravatar服务的用户使用默认图片生成方式。可选值有:(1)'404' ,返回404错误;(2)默认图片的URL;(3)图片生成器:'mm' 、'identicon' 、'monsterid' 、'wavatar' 、'retro' 或'blank' 之一 |
fd | 强制使用默认头像 |
1. 在app/models.py
中增加avatar_hash
字段(用于存储邮箱地址的MD5散列值)、生成邮箱地址的MD5三散列值方法、生成头像URL方法:
|
|
注意:由于生成MD5值是一项CPU密集型操作,所以要在某个页面中生成大量头像,计算量会很大。考虑到电子邮件地址的MD5散列值是不变的(电子邮件地址不变前提下),因此可以将MD5值存储到User模型字段中,而不必每次都进行计算,从而得到优化。
2. 在app/templates/user.html
中增加资料页面中的头像显示:
|
|
3. 在`app/templates/base.html”中导航条上添加已登录用户的头像缩略图:
为了更好地调整页面中头像图片的显示格式,可自定义CSS类,将其放在statics
文件夹中。
|
|