今天会介绍一些 flask 的基本函式,所以我们还没有正式开始写专案。这些基本的函式十分常用,甚至有些会在几乎每个有关 flask 的档案中反覆出现,所以我选择放在最前面介绍,未来如果有忘记的可以回来看一下。
我们先从一个简单的范例来看起。请注意如果要实作的话档名务必使用 app.py,後面会解释。
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def index():
return "Index Page"
app.run(host="127.0.0.1", port=8080, debug=True)
接着只要在 command line 下指令:python app.py
,flask 就会把这个网站建立起来,可以打开浏览器输入 127.0.0.1:8080
,没有意外的话可以看到有一行 Index Page
写在上面。
接下来我会逐行解释这个简单的网站:
app
作为这个 flask application 的实体。/
,这边要注意的是 flask 要求每个路径都要用 /
开头,如 /meow
、/user
等等,meow
是不被允许的,会跳出 ValueError: urls must start with a leading slash
。methods
是一个 list,里面是这个路径所允许的 HTTP method,这边我用 GET 和 POST 为例。如果对装饰器不熟悉可以阅读此篇,在此处我不多加解释其功用。/
的 request,这个函式名称随意,但未来会用到。Index Page
,也就是刚刚在浏览器看到的东西。它的目的就是回传 HTML 或是 response (後面会提到),未来还会加入更多复杂的方式来 render 网页。app.run()
让他跑,并用 host
、port
来指定要跑在哪里,如果是在有公开 IP 的服务器上可以直接把 host
设为该 IP,最後的 debug=True
表示现在是开发模式,flask 会打开一些 debug 的工具,等等会解释。但未来基本上不会使用此方法,所以不会介绍太多。要把这个网站跑起来还有第二个方法,可以在命令列输入 flask run
,这个指令是跟着 pip install flask
一起安装的。
但要注意的是,使用这个指令会自动把程序码里面的 app.run()
忽略,也就是说,他会自动忽略上面的 host
和 port
,在未指定的情况下,预设 host=127.0.0.1
、port=5000
。如果要指定的话,需要传入参数,如 flask run --host 127.0.0.1 --port 8080
,这样会达到和上面相同的效果。
此外,理论上我们需要设定 FLASK_APP
这个环境变数,它的作用是告诉 flask 你的 flask application 在哪里。当没有设定的时候,他会自动去寻找 app.py
、wsgi.py
或是里面有 create_app
、make_app
函式的模组 (後面会提到)。也就是说,如果这时候档名不是 app.py
,他刚刚就不会顺利执行了。
最後还有一个要注意的点,在执行的时候 (两种方法都是) 画面应该会跑出一行红字:WARNING: This is a development server. Do not use it in a production deployment.
,这表示这个执行方法并不适合用於 production。但我们现在只是用於开发,所以可以设定 FLASK_ENV=DEVELOPMENT
这个环境变数,来告诉 flask 现在使用的环境为开发环境。在更改为开发环境的同时,flask 会打开一些 debug 相关的功能:
500 Internal Server Error
。127.0.0.1:8080/console
,flask 有一个内建的 interactive debugger 可以让你跟系统互动。稍微修改一下刚刚的程序码,加入一些新东西。
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def index():
return "Index Page"
@app.route("/dynamic/<int:id>", methods=["GET"])
def dynamic_url_page(id):
return str(id)
app.run(host="127.0.0.1", port=8080, debug=True)
在这个范例里,我们新增了第二个路径 /dynamic/<int:id>
,前面的 /dynamic
跟上面的 /
是接近的,新的东西在後面的 /<int:id>
。
他是 flask 提供的「动态路径」功能,冒号前面的 int
表示他的型别,後面的 id
则是变数名称,而这个变数需要在下方处理 request 的函式中作为一个参数。这时候存取 /dynamic/1
,flask 就会传回 1
,但如果存取 /dynamic/meow
,那就会传回 404 Not Found
,因为 meow
并非一个整数,并没有符合这条路径规则。
我们也可以把规则写成 /dynamic/@<int:id>
,这样一来,存取 /dynamic/@1
就会传回 1。
值得一提的是,如果在回传的时候没有先把 id
转型成 str
,那 flask 会有错误:TypeError: The view function did not return a valid response. The return type must be a string, dict, tuple, Response instance, or WSGI callable, but it was a int.
,这表示你回传的不是正确的型别,合法的型别只有 str
、Response
(未来会提到) 等等,其余可以参考附录一。
今天看了两个简单的 flask 范例,基本上这样就足以建出一个简单的小网站,但未来我们还会继续探讨其他函式。
Flask: return value of view function
Command Line Interface
<<: [Day1] iThome 铁人赛,I'm back!!!!!!!!!!
物件侦测(Object Detection)是影像辨识中重要的一环~ 物件侦测就是在照片或影片等图像...
在以下环境搭建内容会示范如何从GCP部署机器(VM)至安装Percona(mysql)的过程。 作业...
前言 当一个网站取得 Public IP 与 internet 连接时,也就表示网站正开始面对来自全...
Colab连结 有没有人发现几乎每个在开源的专案上,Batch size 都是2的N次方,像32, ...
想要在网路上取得台股最新的股价有许多种方式,其中一种免费的方式就是直接向证交所网站取得股价资料,这次...