Flask的HelloWorld程序
一. 项目搭建
1 创建项目,设置虚拟环境为flask的虚拟环境:
2 Flask程序编写
创建helloworld.py文件
# 导入Flask类 from flask import Flask #Flask类接收一个参数__name__ app = Flask(__name__) # 装饰器的作用是将路由映射到视图函数index @app.route('/') def index(): return 'Hello World' # Flask应用程序实例的run方法启动WEB服务器 if __name__ == '__main__': app.run()
3 启动运行
-
手动运行
python helloworld.py
-
pycharm运行
像正常运行普通python程序一样即可。
- 启动后,控制台:
-
(flask) D:\work\flask_hello_word>python helloworld.py * Serving Flask app "helloworld" (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: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [11/Mar/2021 20:42:47] "?[37mGET / HTTP/1.1?[0m" 200 - 127.0.0.1 - - [11/Mar/2021 20:42:47] "?[33mGET /favicon.ico HTTP/1.1?[0m" 404 -
4 浏览器访问http://127.0.0.1:5000/
二. 参数说明
- Flask对象的初始化参数
- 应用程序配置参数
- app.run()运行参数
1 Flask对象初始化参数
Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块),接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数:
- import_name
- Flask程序所在的包(模块),传
__name__
就可以。指定工程目录,传模块名称,当传__name__
表明当前模块所在目录为工程目录 - 其可以决定 Flask 在访问静态文件等的查找的路径,即为工程目录所在路径
- Flask程序所在的包(模块),传
- static_url_path
- 静态文件访问路径,可以不传,默认为:
/static
- 静态文件访问路径,可以不传,默认为:
- static_folder
- 静态文件存储的文件夹,可以不传,默认为
static
- 静态文件存储的文件夹,可以不传,默认为
- template_folder
- 模板文件存储的文件夹,可以不传,默认为
templates
- 模板文件存储的文件夹,可以不传,默认为
实例一:
全部使用默认值:
访问静态文件:
实例二:
指定参数:
访问静态文件:
2 应用程序配置参数
2.1 应用程序配置参数:
对于Flask对象初始化参数仅仅设置的是Flask本身的属性,比如:
- Flask从哪里读取静态文件
- Flask从哪里读取模板文件
- ...
应用程序配置参数设置的是一个Web应用工程的相关信息,比如:
- 数据库的连接信息
- 日志的配置信息
- 自定义的配置信息
- ...
作用: 集中管理项目的所有配置信息
2.2 定义方法:三种方法
- Django将所有配置信息都放到了settings.py文件中,而Flask则不同。Flask将配置信息保存到了
app.config
属性中,该属性可以按照字典类型进行操作。
方法一:从配置对象中加载
- 配置信息定义在一个对象中,通过这个对象来加载配置
-
app.config.from_object(配置对象)
from flask import Flask # 配置对象 class DefaultConfig(object): # 定义配置信息 CONFIG1 = "abc" app = Flask(__name__, static_url_path="/s", static_folder="static_f") # 根据对象加载配置 app.config.from_object(DefaultConfig) @app.route("/") def index(): # 获取配置信息 print(app.config.get("CONFIG1")) return "hello world" if __name__ == '__main__': app.run()
-
应用场景:作为默认配置写在程序代码中,可以继承DefaultConfig
class DevelopmentConfig(DefaultConfig): DEBUG=True
方法二:从配置文件中加载
工程目录下创建配置文件setting.py, 内容为:
CONFIG1 = "DEF"
加载配置:
from flask import Flask app = Flask(__name__, static_url_path="/s", static_folder="static_f") # 从配置文件加载配置 app.config.from_pyfile("setting.py") @app.route("/") def index(): # 获取配置信息 print(app.config.get("CONFIG1")) return "hello world" if __name__ == '__main__': app.run()
方法三:从环境变量中加载配置
from flask import Flask app = Flask(__name__, static_url_path="/s", static_folder="static_f") # 从环境变量中加载配置 环境变量指定配置文件路径 app.config.from_envvar("PRO_CONFIG", silent=True) @app.route("/") def index(): # 获取配置信息 print(app.config.get("CONFIG1")) return "hello world" if __name__ == '__main__': app.run()
说明:
- 环境变量的值指定了配置文件所在位置
-
app.config.from_envvar("PRO_CONFIG", silent=True)第一个参数为环境变量,第二个参数silent默认值为False。为False时,如果加载配置时发现没有这个环境变量不存在,或者环境变量指定的配置文件不存在,会报错。如果设置为True,则不会报错
终端中设置环境变量并启动:
(flask) D:\work\flask_hello_word>set PRO_CONFIG=setting.py (flask) D:\work\flask_hello_word>python helloworld.py * Serving Flask app "helloworld" (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: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
说明:
- 终端中设置的环境变量只在此终端有效,终端关闭,则环境变量也被清除
- window系统使用set设置环境变量,如果是linux,要使用export设置
pycharm中配置启动前设置环境变量:
2.3 读取配置信息:
- 配置信息包存在app.config中,可以看成是一个字典,读取方式:
-
-
app.config.get(name)
-
app.config[name]
-
2.4 三种设置方式优缺点:
* app.config.from_object(配置对象) * 继承 —> 优点 复用 * 敏感数据暴露 缺点 * app.config.from_pyfile(配置文件) * 优点 -> 独立文件 保护敏感数据 * 缺点 -> 不能继承 文件路径固定 不灵活 * app.config.from_envvar('环境变量名') * 优点 -> 独立文件 保护敏感数据 文件路径不固定 灵活 * 缺点-> 不方便 要记得设置环境量 * 设置环境变量 * 终端 export * pycharm 设置
3.5 项目中的常用方式
使用工厂模式(根据不同配置对象)创建Flask app,并结合使用配置对象与环境变量加载配置
- 使用配置对象加载默认配置
- 使用环境变量加载不想出现在代码中的敏感配置信息
def create_flask_app(config): """ 创建Flask应用 :param config: 配置对象 :return: Flask应用 """ app = Flask(__name__) app.config.from_object(config) # 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数 app.config.from_envvar("PROJECT_SETTING", silent=True) return app class DefaultConfig(object): """默认配置""" SECRET_KEY = 'itcast1' class DevelopmentConfig(DefaultConfig): DEBUG=True # app = create_flask_app(DefaultConfig) app = create_flask_app(DevelopmentConfig) @app.route("/") def index(): print(app.config['SECRET_KEY']) return "hello world"
说明:
- 多种方式加载配置信息,如果配置变量相同,后面的配置会覆盖前面的配置
- 默认配置保证程序不报错,通过环境变量加载真正的配置
3 app.run 参数
可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
关于DEBUG调试模式
- 程序代码修改后可以自动重启服务器
- 在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示
开发服务器启动方式(推荐方式)
在1.0版本之后,Flask调整了开发服务器的启动方式,由代码编写app.run()
语句调整为命令flask run
启动。
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello World' # 程序中不用再写app.run()
1 终端启动
$ export FLASK_APP=helloworld
$ flask run
* Running on http://127.0.0.1:5000/
说明:
- window操作系统下,使用set设置环境变量
- flask run命令会默认的去环境变量中找到 FLASK_APP 的环境变量,根据这个环境变量的值决定启动哪个模块,因此启动前要先设置环境变量
- FLASK_APP 的值表示一个模块,不需要加.py的后缀
- flask run 的命令等价于:
python -m flask run
-
环境变量FLASK_APP规范flask的启动实例
-
flask run -h 0.0.0.0 -p 8000
绑定地址范围 -
flask run --help
获取帮助 -
生产模式与开发模式的控制
通过
FLASK_ENV
环境变量规范,即提前设置这个环境变量,可以控制启动方式export FLASK_ENV=production
运行在生产模式,未规范则替代预定方式export FLASK_ENV=development
运行在开发模式
实例:
终端中启动配置:
(flask) D:\work\flask_hello_word>set FLASK_APP=helloworld (flask) D:\work\flask_hello_word>flask run * Serving Flask app "helloworld" * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
2. pycharm中启动配置:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构