没有合适的资源?快使用搜索试试~ 我知道了~
首页Python与Flask入门:Hello, World! 创建Web应用指南
Python与Flask入门:Hello, World! 创建Web应用指南
需积分: 0 3 下载量 106 浏览量
更新于2024-07-14
收藏 2.78MB PDF 举报
《Flask Mega 中文版.pdf》是一份详细的Flask教程,专为Python初学者设计,旨在引领读者逐步构建Web应用。本教程由英文版The Flask Mega Tutorial Part I: Hello, World!翻译而来,以实例驱动的方式教授Flask框架的使用。 第一章,"Hello, World!",引导读者进入编程世界,介绍了如何创建一个基础的Flask项目。作者强调,尽管可以直接从GitHub下载代码示例,但鼓励读者在开始阶段亲手实践,以便更好地理解和掌握基础知识。章节开始时,提供了三个GitHub链接:浏览(Microblog项目本章代码)、下载(Zip文件)以及查看代码差异(Diff),以辅助学习过程。 教程中提到,安装Python是必不可少的,尤其是对于想要使用Flask的人来说。如果系统未预装,作者推荐访问Python官网下载对应版本,特别指出在Windows上使用WSL或Cygwin时,应选择类Unix版本的Python,如Ubuntu或Cygwin提供的版本。 在这一章,作者演示了如何验证Python安装,通过在终端中输入`python3`命令,如果看到类似输出,表明Python已成功安装并运行。交互式解释器在此处起到了关键作用,它允许用户实时试验Python语句,这对于后续章节的编程实践非常有用。 《Flask Mega 中文版.pdf》第一章通过简洁明快的方式,为学习者铺平了通往Python Web开发的道路,通过实际操作和理论相结合的方式,帮助读者建立起对Flask框架的基础认知。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/16604732/bg10.jpg)
自定义500错误页面
这两个模板都从 base.html基础模板继承而来,所以错误页面与应用的普通页面有相同的
外观布局。
为了让这些错误处理程序在Flask中注册,我需要在应用实例创建后导入新的
app/errors.py
模块。 app/__init__.py:
# ...1
2
from app import routes, models, errors3
如果在终端界面设置环境变量 FLASK_DEBUG=0,然后再次出发重复用户名的BUG,你将会
看到一个更加友好的错误页面。
通过电子邮件发送错误
Flask提供的默认错误处理机制的另一个问题是没有通知机制,错误的堆栈跟踪只是被打印
到终端,这意味着需要监视服务器进程的输出才能发现错误。 在开发时,这是非常好的,但
是一旦将应用部署在生产服务器上,没有人会关心输出,因此需要采用更强大的解决方案。
我认为对错误发现采取积极主动的态度是非常重要的。 如果生产环境的应用发生错误,我想
立刻知道。 所以我的第一个解决方案是配置Flask在发生错误之后立即向我发送一封电子邮
件,邮件正文中包含错误堆栈跟踪的正文。
第一步,添加邮件服务器的信息到配置文件中:
class Config(object):1
# ...2
MAIL_SERVER = os.environ.get('MAIL_SERVER')3
MAIL_PORT = int(os.environ.get('MAIL_PORT') or 25)4
MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS') is not None5
![](https://csdnimg.cn/release/download_crawler_static/16604732/bg11.jpg)
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')6
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')7
ADMINS = ['your-email@example.com']8
电子邮件的配置变量包括服务器和端口,启用加密连接的布尔标记以及可选的用户名和密
码。 这五个配置变量来源于环境变量。 如果电子邮件服务器没有在环境中设置,那么我将
禁用电子邮件功能。 电子邮件服务器端口也可以在环境变量中给出,但是如果没有设置,则
使用标准端口25。 电子邮件服务器凭证默认不使用,但可以根据需要提供。 ADMINS配置
变量是将收到错误报告的电子邮件地址列表,所以你自己的电子邮件地址应该在该列表中。
Flask使用Python的 logging包来写它的日志,而且这个包已经能够通过电子邮件发送日志
了。 我所需要做的就是为Flask的日志对象 app.logger添加一个SMTPHandler的实例:
import logging1
from logging.handlers import SMTPHandler2
3
# ...4
5
if not app.debug:6
if app.config['MAIL_SERVER']:7
auth = None8
if app.config['MAIL_USERNAME'] or app.config['MAIL_PASSWORD']:9
auth = (app.config['MAIL_USERNAME'], app.config['MAIL_PASSWORD10
secure = None11
if app.config['MAIL_USE_TLS']:12
secure = ()13
mail_handler = SMTPHandler(14
mailhost=(app.config['MAIL_SERVER'], app.config['MAIL_PORT']),15
fromaddr='no-reply@' + app.config['MAIL_SERVER'],16
toaddrs=app.config['ADMINS'], subject='Microblog Failure',17
credentials=auth, secure=secure)18
mail_handler.setLevel(logging.ERROR)19
app.logger.addHandler(mail_handler)20
如你所见,仅当应用未以调试模式运行,且配置中存在邮件服务器时,我才会启用电子邮件
日志记录器。
设置电子邮件日志记录器的步骤因为处理安全可选项而稍显繁琐。 本质上,上面的代码创建
了一个 SMTPHandler实例,设置它的级别,以便它只报告错误及更严重级别的信息,而不
![](https://csdnimg.cn/release/download_crawler_static/16604732/bg12.jpg)
是警告,常规信息或调试消息,最后将它附加到Flask的 app.logger对象中。
有两种方法来测试此功能。 最简单的就是使用Python的SMTP调试服务器。 这是一个模拟
的电子邮件服务器,它接受电子邮件,然后打印到控制台。 要运行此服务器,请打开第二个
终端会话并在其上运行以下命令:
(venv) $ python -m smtpd -n -c DebuggingServer localhost:8025
要用这个模拟邮件服务器来测试应用,那么你将设置 MAIL_SERVER=localhost和
MAIL_PORT=8025。
译者注:本段中去除了说明设置该端口需要管理员权限的部分,因为这和实际情况不符。
原文如下: To test the application with this server, then you will set
MAIL_SERVER=localhost and MAIL_PORT=8025. If you are on a Linux or Mac OS
system, you will likely need to prefix the command with sudo, 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 set MAIL_PORTvariable to your chosen port
in the environment, and that will not require administration rights.
保持调试SMTP服务器运行并返回到第一个终端,在环境中设置
export MAIL_SERVER=localhost和 MAIL_PORT=8025(如果使用的是Microsoft
Windows,则使用set而不是export)。 确保FLASK_DEBUG变量设置为0或者根本不设置,
因为应用不会在调试模式中发送电子邮件。 运行该应用并再次触发SQLAlchemy错误,以查
看运行模拟电子邮件服务器的终端会话如何显示具有完整堆栈跟踪错误的电子邮件。
这个功能的第二个测试方法是配置一个真正的电子邮件服务器。 以下是使用你的Gmail帐户
的电子邮件服务器的配置:
export MAIL_SERVER=smtp.googlemail.com1
export MAIL_PORT=5872
export MAIL_USE_TLS=13
export MAIL_USERNAME=<your-gmail-username>4
export MAIL_PASSWORD=<your-gmail-password>5
![](https://csdnimg.cn/release/download_crawler_static/16604732/bg13.jpg)
如果你使用的是Microsoft Windows,记住在每一条语句中用 set替换掉 export。
Gmail帐户中的安全功能可能会阻止应用通过它发送电子邮件,除非你明确允许“安全性较低
的应用程序”访问你的Gmail帐户。 可以阅读此处来了解具体情况,如果你担心帐户的安全
性,可以创建一个辅助邮箱帐户,配置它来仅用于测试电子邮件功能,或者你可以暂时启用
允许不太安全的应用程序来运行此测试,完成后恢复为默认值。
记录日志到文件中
通过电子邮件来接收错误提示非常棒,但在其他场景下,有时候就有些不足了。有些错误条
件既不是一个Python异常又不是重大事故,但是他们在调试的时候也是有足够用处的。为
此,我将会为本应用维持一个日志文件。
为了启用另一个基于文件类型RotatingFileHandler的日志记录器,需要以和电子邮件日志记
录器类似的方式将其附加到应用的logger对象中。 app/__init__.py:
# ...1
from logging.handlers import RotatingFileHandler2
import os3
4
# ...5
6
if not app.debug:7
# ...8
9
if not os.path.exists('logs'):10
os.mkdir('logs')11
file_handler = RotatingFileHandler('logs/microblog.log', maxBytes=102412
backupCount=10)13
file_handler.setFormatter(logging.Formatter(14
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)15
file_handler.setLevel(logging.INFO)16
app.logger.addHandler(file_handler)17
18
app.logger.setLevel(logging.INFO)19
app.logger.info('Microblog startup')20
![](https://csdnimg.cn/release/download_crawler_static/16604732/bg14.jpg)
日志文件的存储路径位于顶级目录下,相对路径为 logs/microblog.log,如果其不存在,
则会创建它。
RotatingFileHandler类非常棒,因为它可以切割和清理日志文件,以确保日志文件在应用运
行很长时间时不会变得太大。 本处,我将日志文件的大小限制为10KB,并只保留最后的十
个日志文件作为备份。
logging.Formatter类为日志消息提供自定义格式。 由于这些消息正在写入到一个文件,我希
望它们可以存储尽可能多的信息。 所以我使用的格式包括时间戳、日志记录级别、消息以及
日志来源的源代码文件和行号。
为了使日志记录更有用,我还将应用和文件日志记录器的日志记录级别降低到 INFO级别。
如果你不熟悉日志记录类别,则按照严重程度递增的顺序来认识它们就行了,分别是
DEBUG、 INFO、 WARNING、 ERROR和 CRITICAL。
日志文件的第一个有趣用途是,服务器每次启动时都会在日志中写入一行。 当此应用在生产
服务器上运行时,这些日志数据将告诉你服务器何时重新启动过。
修复用户名重复的BUG
利用用户名重复BUG这么久, 现在时候向你展示如何修复它了。
你是否还记得, RegistrationForm已经实现了对用户名的验证,但是编辑表单的要求稍有
不同。 在注册期间,我需要确保在表单中输入的用户名不存在于数据库中。 在编辑个人资
料表单中,我必须做同样的检查,但有一个例外。 如果用户不改变原始用户名,那么验证应
该允许,因为该用户名已经被分配给该用户。 下面你可以看到我为这个表单实现了用户名验
证:
class EditProfileForm(FlaskForm):1
username = StringField('Username', validators=[DataRequired()])2
about_me = TextAreaField('About me', validators=[Length(min=0, max=1403
submit = SubmitField('Submit')4
5
def __init__(self, original_username, *args, **kwargs):6
super(EditProfileForm, self).__init__(*args, **kwargs)7
self.original_username = original_username8
剩余310页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
小神龙q
- 粉丝: 67
- 资源: 7
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 中国微型数字传声器:技术革新与市场前景
- 智能安防:基于Hi3515的嵌入式云台控制系统设计
- 手机电量低时辐射真增千倍?解析手机使用谣言
- 56F803型DSP驱动的高精度大功率超声波电源控制策略研究
- ARM与GPRS结合的远程监测系统设计
- GPS与RFID技术结合的智能巡检系统设计
- CPLD驱动的低功耗爆炸场温度测试系统设计
- 基于FPGA的智能驱动控制系统:可扩展设计与工业网络协议
- 基于ATmega128和CH374的嵌入式USB接口设计
- 基于AT89C52的温度补偿超声波测距仪:高精度设计与应用
- MSP430F448单片机在交流数字电压表中的应用
- 提升变频器应用效率的12项实用技巧
- STM32F103在数字电镀电源并联均流系统中的应用
- PSpice仿真下的升压开关电源设计:拓扑分析与CCM稳定性提升
- 轻巧高效:MSP430主导的低成本无线传感器网络节点设计
- FPGA在EDA/PLD中实现LVDS接口的应用解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)