本教程的这一部分假设您有一个希望将应用程序部署到其中的服务器。它概述了如何创建分发文件并安装它,但不会详细说明使用什么服务器或软件。您可以在您的开发计算机上设置一个新的环境来尝试下面的说明,但是可能不应该使用它来托管一个真正的公共应用程序。有关托管应用程序的许多不同方法的列表,请参阅部署选项。
构筑和安装
当您希望将应用程序部署到其他地方时,您需要构建一个分发文件。Python发行版的当前标准是wheel格式,扩展名为.whl。确保先安装车轮库:
pip install wheel
使用Python运行setup.py可以提供一个命令行工具来发出与构建相关的命令。bdist_wheel命令将构建一个wheel分发文件。
python setup.py bdist_wheel
您可以在dist/ flasker -1.0.0-py3-none-any.whl中找到该文件。文件名是项目的名称、版本以及可以安装的有关文件的一些标记。
将该文件复制到另一台机器,设置一个新的virtualenv,然后用pip安装该文件
pip install flaskr-1.0.0-py3-none-any.whl
Pip将安装您的项目及其依赖项。
由于这是一台不同的机器,您需要再次运行init-db来在实例文件夹中创建数据库。
export FLASK_APP=flaskr
flask init-db
当Flask检测到它已经安装(不在可编辑模式下)时,它会为实例文件夹使用一个不同的目录。您可以在venv/var/ flasker -instance中找到它。
配置密钥
在本教程的开头,您为SECRET_KEY提供了一个默认值。在生产中,这应该改为**随机字节。**否则,攻击者可以使用公开的“dev”密钥修改会话cookie,或者使用密钥的任何其他内容。
您可以使用以下命令输出一个随机密钥:
python -c 'import os; print(os.urandom(16))'
b'_5#y2L"F4Q8z\n\xec]/'
在实例文件夹中创建config.py文件,如果存在,工厂将从中读取。将生成的值复制到其中。
venv/var/flaskr-instance/config.py
SECRET_KEY = b'_5#y2L"F4Q8z\n\xec]/'
您还可以在这里设置任何其他必要的配置,尽管SECRET_KEY是Flaskr惟一需要的配置。
运行在一个生产服务器
当公开运行而不是在开发中运行时,您不应该使用内置的开发服务器(Flask运行)。开发服务器是由Werkzeug提供的,其目的是为了方便,但并不是特别高效、稳定或安全。
相反,使用一个生产的WSGI服务器。例如,要使用Waitress,首先要在虚拟环境中安装它:
pip install waitress
您需要告诉waitress您的应用程序,但它不像Flask运行那样使用FLASK_APP。您需要告诉它导入并调用应用程序工厂来获取应用程序对象。
waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080
有关托管应用程序的许多不同方法的列表,请参阅部署选项。Waitress只是一个例子,之所以选择它作为本教程的示例,是因为它同时支持Windows和Linux。您可以为您的项目选择更多的WSGI服务器和部署选项。
继续发展
在本教程中,您已经了解了不少Flask和Python的概念。回顾本教程,并将您的代码与实现该目标的步骤进行比较。将您的项目与示例项目进行比较,由于本教程是按部就班的,示例项目看起来可能有些不同。
Flask比你目前看到的要多得多。即便如此,您现在已经准备好开始开发自己的web应用程序。查看快速入门,了解Flask可以做什么,然后深入文档继续学习。Flask使用了Jinja、Click、Werkzeug以及它在幕后的危险性,而且它们都有自己的文档。您还会对扩展感兴趣,这些扩展使处理数据库或验证表单数据之类的任务变得更容易、更强大。
如果你想继续开发你的Flaskr项目,这里有一些下一步尝试的想法:
- 显示单个帖子的详细视图。点击一篇文章的标题进入它的页面。
- 喜欢/不喜欢一篇文章。
- 评论。
- 标签。单击标记将显示带有该标记的所有帖子。
- 按名称过滤索引页的搜索框。
- 分页显示。每页只显示5篇文章。
- 上传一张图片和一篇文章。
- 使用标记来格式化文章。
- 新文章的RSS提要