处理bug的最好方式是亲自经历一次。在之前完成的应用中有一个bug。怎么触发这个bug呢?首先确保你的应用中注册了至少两个用户,登录其中一个用户,打开profile页并点击编辑链接。在编辑profile页面中,username改为另一个已经注册的用户,然后bug出现了。
此时建议打开debug功能, export flask_debug=1,再触发一次该bug,就能看到如下的debug信息。
出现这个bug的原因是在把username写入数据库时,写入了一个已经存在的用户名,而用户名定义成唯一,因此出现错误。
回想一下,registrationform已经验证了username,但是编辑表单的需求有点不同。注册中,需要确保用户输入的用户名在数据库中不存在。编辑profile时也需要做相应的检查。
解决这个问题的方法是添加对username的检查。
由于editprofileform的构造函数增加了参数,因此创建它的对象时需要添加参数。
form = editprofileform(current_user.username)
然后在验证参数时显式的调用form.validate_username函数。