Flask官方文档:
https://flask.palletsprojects.com
中文文档:
https://dormousehole.readthedocs.io/en/latest/
Flask 是一个使用 Python 编写的轻量级 Web 开发框架。它被设计成简单、易用,并且具有灵活性,可以帮助开发者快速搭建 Web 应用程序。
以下是 Flask 的一些主要特点和优势:
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
import flask
print(flask.__version__) #2.3.3
from flask import Flask
# 创建一个 Flask 应用程序实例。__name__ 是一个特殊变量,表示当前模块的名称
app = Flask(__name__)
@app.route('/') # 使用修饰器指定 URL 路由规则,将根路径 / 映射到下面定义的 hello_world 函数
def hello_world(): # 路由处理函数
return 'Helllo World'
if __name__ == '__main__':
# 调用 Flask 应用程序实例的 run 方法,启动 Web 服务器,开始监听来自客户端的请求
app.run()
运行这段代码时,Flask 会启动一个本地的 Web 服务器,在默认的 http://127.0.0.1:5000/
地址上监听请求。当访问该地址时,Flask 会将请求映射到 hello_world
函数,并返回 'Hello World'
字符串作为响应内容。
Flask常见警告
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
这个开发服务器仅适用于开发环境,并不适合在生产环境中使用,而应该使用专门的生产级 WSGI 服务器。
是连接用户浏览器与WSGI和我们使用Flask开发的应用程序的中间节点
常见的 Web 服务器有以下几种:
WSGI (Web Server Gateway Interface) 是 Python Web 应用程序和 Web 服务器之间的一种标准接口。它定义了一个简单而通用的方式,使得 Python Web 应用程序可以与各种符合 WSGI 标准的 Web 服务器进行交互。
WSGI 的主要目的是实现 Web 应用程序与 Web 服务器之间的解耦。通过遵循 WSGI 接口,Web 应用程序可以独立于特定的 Web 服务器进行开发和测试,并且可以在不同的服务器环境中运行。
在一个典型的 WSGI 应用程序中,有两个主要的组件:
WSGI 实现了一种简单的协议,使得 Web 应用程序和服务器之间可以通过一套统一的接口进行交互。这样的设计使得开发和部署 Web 应用程序变得更加灵活和可扩展。许多 Python Web 框架都是基于 WSGI 标准构建的,例如 Flask、Django 等。
my_webserver.py
""" 简单WSGI服务器实现 """
from wsgiref.simple_server import make_server
# make_server 函数是 wsgiref 模块中提供的用于创建 WSGI 服务器的函数
def main(): # main 函数用于启动服务器
# 创建一个 WSGI 服务器实例,并将其赋值给变量 server。
# 指定服务器的主机名为 'localhost',端口号为 8001,处理请求的 WSGI 应用程序为 hello_world 函数。
server = make_server('localhost', 8001, hello_world)
print('Serving HTTP on port8001...')
# 阻塞调用,使得服务器一直运行,直到接收到停止服务器的信号
server.serve_forever()
def hello_world(environ, start_response): # 作为 WSGI 应用程序。environ 是包含请求信息的字典,start_response 是用于发送响应的回调函数。
status = "200 OK"
response_headers = [('Content-Type', 'text/html')] # 表示响应头部分的 Content-Type 属性为 'text/html'
start_response(status, response_headers)
path = environ['PATH_INFO'][1:] or 'hello world'
return [b' %s
' % path.encode()] # 构建一个包含 HTML 标签的响应内容,并将其作为字节类型的列表返回
if __name__ == '__main__':
main()
在浏览器中通过访问 http://localhost:8001 查看到 “hello world” 的标题。
在 Flask 中,调试模式(debug mode)是一个开关,用于在开发过程中启用一些有用的调试功能。当调试模式处于启用状态时,如果出现错误,Flask 会提供详细的错误信息,以帮助开发者进行调试。
要启用调试模式,可以在应用程序的 app.run()
函数中设置 debug=True
。例如:
from flask import Flask
app = Flask(__name__)
# 应用程序代码
if __name__ == '__main__':
app.run(debug=True)
在上面的示例中,debug=True
将调试模式启用。当应用程序运行时,如果发生错误,将显示详细的错误信息,并提供交互式调试器。
调试模式提供以下功能:
需要注意的是,调试模式不应该在生产环境中使用,因为它可以暴露应用程序的敏感信息和漏洞。在发布应用程序之前,请确保将调试模式禁用或删除 debug=True
。
在 Flask 中,可以使用 app.run()
方法来启动一个本地服务器。这个方法可以接受一些可选的参数,例如 host
和 port
,用于指定服务器的主机名和端口号。
以下是如何设置 host
和 port
的示例代码:
from flask import Flask
app = Flask(__name__)
# 应用程序代码
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
在上面的示例中,host='0.0.0.0'
表示监听所有网络接口上的请求,而 port=5000
表示使用端口号 5000。
如果想要在本地访问应用程序,可以在浏览器中输入地址:http://localhost:5000
。
需要注意的是,在生产环境中,应该将 host
设置为应用程序所在服务器的 IP 地址或域名,并将 port
设置为合适的端口号。另外,如果将应用程序部署到云服务提供商(如 Amazon Web Services 或 Microsoft Azure)中,则通常需要配置防火墙和网络安全组,以确保只有经过授权的用户可以访问应用程序。
在 Flask 中,可以使用 app.config
对象来配置应用程序的各种参数和设置。这个对象实际上是一个字典,可以通过键值对的方式来设置和获取配置项。
以下是如何使用 app.config
配置应用程序的示例代码:
from flask import Flask
app = Flask(__name__)
# 设置配置项
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'mysecretkey'
app.config['DATABASE_URI'] = 'sqlite:///database.db'
# 应用程序代码
在上面的示例中,通过 app.config['配置项名称'] = 值
的方式来设置配置项。你可以根据需要设置任意数量的配置项。
常见的 Flask 配置项包括:
DEBUG
:调试模式的开关,True
表示启用调试模式,默认为 False
。SECRET_KEY
:用于加密会话数据的密钥,需使用安全的随机字符串进行设置。DATABASE_URI
:数据库的连接字符串,用于连接数据库。TEMPLATES_AUTO_RELOAD
:模板自动重新加载的开关,True
表示在模板文件修改后自动重新加载,默认为 True
。你可以根据应用程序的需求自由设置和使用配置项。
在 Flask 中,可以使用 Python 的配置文件来管理应用程序的配置项。通过使用配置文件,将不同环境下的配置分开管理,并根据需要加载相应的配置。
以下是如何使用 Python 配置文件的示例代码:
config.py
的 Python 配置文件,定义配置项和对应的值:# config.py
class Config:
DEBUG = False
SECRET_KEY = 'mysecretkey'
DATABASE_URI = 'sqlite:///database.db'
class DevelopmentConfig(Config):
DEBUG = True
class ProductionConfig(Config):
DEBUG = False
DATABASE_URI = 'mysql://user:password@localhost/dbname'
from flask import Flask
app = Flask(__name__)
# 导入配置文件
app.config.from_object('config.DevelopmentConfig')
# 或者使用下面的方式
# app.config.from_envvar('APP_CONFIG')
# 应用程序代码
以上示例中,使用 app.config.from_object()
方法加载配置文件,并指定要使用的配置子类(例如 DevelopmentConfig
)。这样,应用程序将使用 DevelopmentConfig
类中的配置项。
也可以使用 app.config.from_envvar()
方法从环境变量加载配置文件路径,这样可以根据不同的环境设置不同的配置文件。
# 获取配置项的值
debug_mode = app.config['DEBUG']
secret_key = app.config['SECRET_KEY']
database_uri = app.config['DATABASE_URI']
在应用程序的其他地方,可以使用 app.config['配置项名称']
来获取配置项的值。