本教程将一步一步创建一个名为Flaskr基本的博客应用程序app.config,用户将能够注册、登录、创建帖子以及编辑或删除自己的帖子,也能够在其他计算机上打包并安装该应用程序
本教程为学习者提供好的起点,并没有包含Flask的所有功能,仅使用Flask和Python自身包含的知识,没有使用扩展包。在其他项目中,您可能会决定使用扩展或其他库来简化某些任务
Flask的使用很灵活,无需使用特定项目或代码布局。然而,从开始就使用结构化的方法将帮助开发者形成良好的习惯。本教程将需要一些样板,以避免开发人员遇到常见陷阱,并且易于扩展。等你能够熟练的使用Flask后,就可以从结构化方法中跳脱出来,充分使用Flask的高效和灵活
如果您想在遵循教程的过程中将您的项目与最终产品进行比较,则可以在Flask存储库中以示例的形式提供教程项目。
项目文件布局
在命令行中创建项目目录文件夹
$ mkdir flask-tutorial
$ cd flask-tutorial
然后按照前述章节步骤设置Python虚拟环境,并安装Flask。从现在开始本教程的任何文件都在flask-tutorial目录,下面每个代码块顶部的文件名都默认是该目录下的。
一个Flask应用程序可以简单到只有一个文件
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
随着项目越来越大,将所有代码保存在一个文件中会很难维护。Python项目使用包将代码组织成多个模块,这些模块可以在需要的位置导入使用,本教程将采用这种方式。
项目的目录中包含下面的文件:
项目最终完成后,文件布局将如下所示:
如果使用版本控制,则应忽略在运行项目时生成的以下文件,另外使用的编辑器不同,可能还有其他文件产生。一般应忽略未写入的文件。例如,使用git
构建应用程序
Flask应用程序是Flask类的一个实例创业项目,关于应用程序配置和URL等功能,都将使用完成注册工作。创建Flask应用程序最简单的方法是直接在代码顶部创建一个全局Flask实例,就像上一节“Hello,World!”示例。这样虽然简单快捷,但项目变大后可能会导致一些问题发生。在函数内部创建Flask实例,而创建全局实例,而这个函数称为应用程序工厂,应用程序所需的任何配置、注册和其他设置都将在函数内部进行,然后返回应用程序。
应用程序工厂
在项目根目录下一全创建flaskr目录app.config,添加一个__init__.py文件,这个文件完成两任务:一是包含应用程序工厂,二是告诉Python将该r目录视为一个包。创建文件夹和代码如下:
mkdir flaskr
flaskr/__init__.py
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# a simple page that says hello
def hello():
return 'Hello, World!'
return app
create_app是应用程序工厂函数,后面会继续完善这个函数,但现在已经做了很多工作。
app=Flask(__name__,instance_relative_config=True)创建一个Flask实例。
(1)__name__是当前Python模块的名称,应用程序需要知道它的位置才能设置一些路径,使用__name__是最简单的方式
(2)instance_relative_config=True设置应用程序的配置文件与实例文件夹相关。实例文件夹位于flaskr包之外,可以保存不应提交给版本控制的本地数据,如配置机密和数据库文件。
app.config.from_mapping()函数设置应用程序的一些默认配置:
(1)机密密钥由Flask和扩展程序使用,以确保数据的安全。它被设置为“dev”以在开发过程中提供方便的值,但在部署应用程序时需重写为一个随机值。
(2)DATABASE是保存SQLite数据库文件的路径。它位于app.instance_path下,这是Flask为实例文件夹选择的路径。下一节中了解有关数据库的更多信息。
app.config.from_pyfile()使用从实例文件夹中的config.py文件(如果存在)获取的值重新完成程序配置。例如,在部署时,这可以用于设置真正的SECRET_KEY。
(1)test_config作为参数传递给工厂函数,被用来代替实例配置。这样,您将在本教程后面编写的测试就可以独立于您配置的任何开发值进行配置。
os.makedirs()保证app.instance_path存在。Flask不会自动创建实例文件夹,因为项目的SQLite数据库文件在这个目录中,因此必须创建它。
@route()创建了一个简单的路由,这样您就可以在进入本教程的其余部分之前看到应用程序的工作情况。它在URL(/hello)绑定到一个视图函数,这个函数返回响应字符串“hello,World!”
运行这个程序
现在,可以使用flask命令运行您的应用程序。在终端上,告诉Flask应用程序的启动位置,然后在调试模式下运行它。记住,您应该仍然在flask-tutorial目录,而不是flaskr包目录中。调试模式在页面引发异常时显示错误信息,并在更改代码时重新启动服务器。只需按照教程重新加载浏览器页面,就可以继续运行。
flask --app flaskr run --debug
类似的输出信息如下:
* Serving Flask app "flaskr"
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: nnn-nnn-nnn
在浏览器中访问:5000/hello,您应该会看到“Hello,World!”消息。祝贺您,您现在正在运行您的Flask web应用程序!
如果另一个程序已经在使用端口5000,当服务器尝试启动时,您将看到OSError:[Erno 98]或OSError:[WinError 10013]。有关如何处理此问题,请参阅Address already in use。
注册会员查看全部内容……
限时特惠本站每日持续更新海量各大内部创业教程,年会员只要98元,全站资源免费下载
点击查看详情
站长微信:9200327