目录
一、开发简单脚本网站
二、代码分析
2.1 初始化
2.2 路由和视图函数
2.3 启动服务器
相比于另一个Python Web框架Django,Flask更“Python”化一些,因为我们可以在一个.py脚本文件中写完运行整个项目的所有代码。紧跟上一节内容,我们在blog项目下新建一个test.py文件,然后在该文件中填入主运行函数如下:
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "<h1>我的第一个网站</h1>" if __name__ == '__main__': app.run(debug=True)
上面的代码已经开发完成了一个最简单的网站。我们可以先不分析具体的代码,直接执行来看一下效果。我们在终端中输入命令来启动这个项目:
python test.py
正常情况下输出如下所示:
* Serving Flask app 'test' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Restarting with stat * Debugger is active! * Debugger PIN: 115-661-457 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
如果没有准确输出上面的内容,那么就要检查代码,其中注意__name__和__main__两个地方,这里前后都是两个下划线。
正常启动后我们就可以在浏览器中访问我们的这个网站,网址就在上述输出的最后一行http://127.0.0.1:5000/。效果如下图所示:
可以看到仅仅这么简单的7行代码,我们就构建了一个网站,这就是flask简洁的魅力。下面我们具体分析下代码。
from flask import Flask app = Flask(__name__)
上述代码首先我们从flask中引入Flask类,然后创建一个Flask类的实例app,并且以参数__name__传入(注意,这里的name前后各有两个下划线),这里的__name__是python的内置变量,当你直接执行一段脚本的时候,这段脚本的 __name__变量等于 '__main__', 当这段脚本被导入其他程序的时候,__name__ 变量等于脚本本身的名字。由于我们这里是一个单一的脚本,所以此时这个__name__变量实际执行时它的值为'__main__'。最后需要说明一点的是,我们创建的这个app是在脚本最外层定义的,即它是一个全局变量,在其他函数中可以直接使用这个全局变量。
@app.route('/') def index(): return "<h1>我的第一个网站</h1>"
首先理解两个概念:路由和视图函数。浏览器把请求发送给Flask服务程序,服务程序需要知道针对不同的网址需要运行什么代码,所以保存了一个网址到函数的映射关系,这个映射关系就是路由,一般也用url来表示,而这个路由对应的处理函数就是视图函数。打个比方,例如我们去代收点取快递(发起请求),我们需要将一个快递编号(路由)交给仓库管理员(服务程序),仓库管理员根据这个快递编号再去对应的货架上找货,然后将这个货物扫码一下表示已领取(视图函数),最后将物品交给我们(返回请求结果)。
在Flask 程序中定义路由的最简便方式,就是使用程序实例提供的app.route 修饰器,把修饰的函数注册为路由。例如上面的@app.route('/'),这里'/'表示当前网址根目录。我们可以修改下,改成@app.route('/show'),保存后重新运行下程序,我们会发现访问出错,提示404找不到页面的错误:
如果我们在我们的访问网址后面加上/show,也就是访问这个网址:127.0.0.1:5000/show,我们可以发现又可以重新正常访问了:
到这里,我相信读者已经明白这个路由的含义了。
我们定义的视图函数名为index,函数中没有额外的操作,直接return返回 "<h1>我的第一个网站</h1>",这里使用了html硬编码的方式,也就是将网页页面内容直接以字符串形式写入并返回,返回的html内容是一个带有<h1>的中文字符串。需要说明的是,一般情况我们不会使用这种硬编码的方式将html的内容写入到python代码中,而是采用一种“模板渲染”的技术,后面教程我们会重点讲解。
if __name__ == '__main__': app.run(debug=True)
启动flask服务器的方式比较简单,直接在主函数中通过app.run()函数即可启动。服务器启动后,会进入轮询,等待并处理结果。我们可以使用快捷键ctrl+c来停止该服务器。这里需要注意一下在启动函数的输入参数中,我们使用了debug=True,表示debug调试模式启动,这种模式在开发阶段比较方便,如果有错误页面会给出错误提示。如果开发调试都已完成,正式部署网站的时候需要将debug设置为False。