username
列是用unique=True
定义的。export
替换成set
。FLASK_DEBUG
后,重启服务。相比之前,终端上的输出信息会有所变化:flask run
命令的输出中看到它)。flask run
,则可以在开发应用时,每当保存文件,应用都会重新启动以加载新的代码。@errorhandler
装饰器来声明一个自定义的错误处理器。 我将把我的错误处理程序放在一个新的app/errors.py模块中。base.html
基础模板继承而来,所以错误页面与应用的普通页面有相同的外观布局。FLASK_DEBUG=0
,然后再次出发重复用户名的BUG,你将会看到一个更加友好的错误页面。ADMINS
配置变量是将收到错误报告的电子邮件地址列表,所以你自己的电子邮件地址应该在该列表中。SMTPHandler
实例,设置它的级别,以便它只报告错误及更严重级别的信息,而不是警告,常规信息或调试消息,最后将它附加到Flask的app.logger
对象中。MAIL_SERVER=localhost
和MAIL_PORT=8025
。译者注:本段中去除了说明设置该端口需要管理员权限的部分,因为这和实际情况不符。原文如下: To test the application with this server, then you will setMAIL_SERVER=localhost
andMAIL_PORT=8025
. If you are on a Linux or Mac OS system, you will likely need to prefix the command withsudo
, so that it can execute with administration privileges. If you are on a Windows system, you may need to open your terminal window as an administrator. Administrator rights are needed for this command because ports below 1024 are administrator-only ports. Alternatively, you can change the port to a higher port number, say 5025, and setMAIL_PORT
variable to your chosen port in the environment, and that will not require administration rights.
export MAIL_SERVER=localhost
和MAIL_PORT=8025
(如果使用的是Microsoft Windows,则使用set而不是export)。 确保FLASK_DEBUG变量设置为0或者根本不设置,因为应用不会在调试模式中发送电子邮件。 运行该应用并再次触发SQLAlchemy错误,以查看运行模拟电子邮件服务器的终端会话如何显示具有完整堆栈跟踪错误的电子邮件。set
替换掉export
。logs/microblog.log
,如果其不存在,则会创建它。INFO
级别。 如果你不熟悉日志记录类别,则按照严重程度递增的顺序来认识它们就行了,分别是DEBUG
、INFO
、WARNING
、ERROR
和CRITICAL
。RegistrationForm
已经实现了对用户名的验证,但是编辑表单的要求稍有不同。 在注册期间,我需要确保在表单中输入的用户名不存在于数据库中。 在编辑个人资料表单中,我必须做同样的检查,但有一个例外。 如果用户不改变原始用户名,那么验证应该允许,因为该用户名已经被分配给该用户。 下面你可以看到我为这个表单实现了用户名验证:validate_username()
方法中被校验。 如果在表单中输入的用户名与原始用户名相同,那么就没有必要检查数据库是否有重复了。