Hello World
安装flask
这一步可以随意,建议自己新建一个python虚拟环境
python -m venv flaskenv
简单的flask应用
在flask官网上,它会给你一个简单的测试程序,而不是一个简单的项目。
我将向您展示一个稍微复杂的示例,它将为您编写大型应用程序提供良好的基础结构。
先看一下我的项目结构
flaskenv
microblog/
app/
__init__.py
routes.py
microblog.py
flaskenv是我的python虚拟环境,microblog是整个简单的应用。我们创建一个名为app的程序包,它将托管该应用程序。
要完成该应用程序,您需要在顶层定义一个Flask应用程序实例的Python脚本,microblog.py,并将其定义为导入应用程序实例的一行。
接下来的操作都是在microblog文件夹下执行的
下面开始逐个文件去看
#app/__init__.py
from flask import Flask
app = Flask(__name__)
from app import routes
传递给Flask类的__name__变量是Python预定义变量,该变量设置为使用它的模块的名称。 Flask需要加载相关资源(例如模板文件)时,将此处传递的模块位置用作起点。
然后,该应用程序导入(routes)路由模块,该模块尚不存在。
note
有的新人可能会疑惑这里有两个 app。在__init__.py文件中,第一行的app是一个Flask类的实例。
第二行的app是包,是我们app这个文件夹,因为有__init__.py这个文件,该app文件夹被定义成包,同时这个包里还有routes.py文件。
note
现在来看第三行代码,它从app包里导入routes,不过它为什么要写在底部而不是顶行。这是为了避免“循环导入”。因为routes要导入app包里的app成员,app包又要导入routes文件,感觉要死锁了。
不过把第三行放在底部就好了,确切的说是放在第二行代码后面,(从上往下读代码)在启动routes的时候要保证app包里已经有app实例了。
举个错误例子
#app/__init__.py
from flask import Flask
from app import routes
app = Flask(__name__)
首先导入Flask,然后从app包里导入routes,接着进入routes,routes首先导入app包里的app实例,但注意,按照我们读代码的顺序,目前app包里是没有app实例的,所以就会报错。
routes代码
#app/routes.py
from app import app
@app.route('/')
@app.route('/index')
def index():
return "Hello, World!"
这里又出现了双app的代码,第一个app指的是包app,第二个app是这个包的成员,它是Flask类的一个实例。如果你觉得有点绕,可以把其中一个app换一个名字。如果你了解python的包结构,这不是问题。
路由是应用程序实现的不同URL。在Flask中,应用程序路由的处理程序被编写为Python函数,称为视图函数。视图函数被映射到一个或多个路由URL,以便Flask知道客户端请求给定URL时要执行的逻辑。
这个视图函数实际上非常简单,它只是以字符串形式返回问候语。函数上方的两条奇怪的@ app.route行是装饰器,这是Python语言的独特功能。装饰器修改其后的功能。装饰器的常见模式是使用它们将函数注册为某些事件的回调。在这种情况下,@ app.route装饰器会在作为参数提供的URL与函数之间创建关联。在此示例中,有两个装饰器,它们将URL /和/ index与此函数相关联。这意味着,当Web浏览器请求这两个URL之一时,Flask将调用此函数并将其返回值作为响应传递回浏览器。如果这还没有完全意义,那么在您运行该应用程序时会稍作调整。
现在我们定义好一个程序实例了,一定义了一个视图函数,接下来就是怎么让它运行起来
#microblog.py
from app import app
export FLASK_APP=microblog.py
flask run
Serving Flask app "microblog"
Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
最后打开浏览器输入
http://localhost:5000/
http://localhost:5000/index
都可以进入我们定义的视图函数