Flask框架的入门使用
- Flask框架
- Flask概述
- 常用扩展包
- Flask的基本使用
- 环境准备
- 创建helloworld.py文件
- 启动运行
- 访问
- 参数配置
- Flask对象配置
- 应用程序配置
- 读取配置信息
- 加载配置信息
- 配置对象与环境变量结合
- app.run参数
- 开发服务器启动方式
- 在命令行中运行
- Python程序中手动启动
- Pycharm启动
Flask框架
Flask概述
Flask是一个使用 Python编写的轻量级Web应用程序开发框架。Flask是基于Werkzeug WSGI工具包和Jinja2模板引擎。
WSGI
Web Server Gateway Interface(Web服务器网关接口,WSGI)已被用作Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。
Werkzeug
它是一个WSGI工具包,它实现了请求,响应对象和实用函数。 这使得能够在其上构建web框架。 Flask框架使用Werkzeug作为其基础之一。
jinja2
jinja2是Python的一个流行的模板引擎。Web模板系统将模板与特定数据源组合以呈现动态网页。
Django与Flask的区别:
Django是一个重量级的框架,为业务开发,提供了丰富的工具、组件
Flask是一个轻量级的框架,只提供Web框架的核心功能,自由、灵活、高度定制
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用NoSQL。
Flask文档
中文文档:https://dormousehole.readthedocs.io/en/latest/
英文文档:https://flask.palletsprojects.com/en/2.2.x/
常用扩展包
扩展列表:http://flask.pocoo.org/extensions/
Flask-SQLalchemy:操作数据库
Flask-script:插入脚本
Flask-migrate:管理迁移数据库
Flask-Session:Session存储方式指定
Flask-WTF:表单
Flask-Mail:邮件
Flask-Bable:提供国际化和本地化支持,翻译
Flask-Login:认证用户状态
Flask-OpenID:认证
Flask-RESTful:开发REST API的工具
Flask-Bootstrap:集成前端Twitter Bootstrap框架
Flask-Moment:本地化日期和时间
Flask-Admin:简单而可扩展的管理接口的框架
Flask的基本使用
环境准备
1.创建虚拟环境
创建虚拟环境,进行不同项目的环境隔离。其拥有独立的python解释器和对应的依赖文件的环境,独立于真实环境
mkvirtualenv flask -p python3
2.安装Flask
pip install 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()
启动运行
1.命令手动运行
python helloworld.py
2.pycharm 运行
访问
访问:http://127.0.0.1:5000
参数配置
Flask对象配置
Flask可以通过传递不同的参数来初始化创建(
app = Flask(__name__)
)程序实例,其默认传入当前模块的名称(__name__ 是一个特殊变量,表示当前 Python 模块的名称
)作为参数,另外还可以指定参数配置,这些参数是设置Flask本身的属性。
常用参数:
import_name:用于确定Flask程序所在的包(模块)的名称和位置,使用__name__为默认值,一般不用修改。其可以决定Flask在访问静态文件时查找的路径
static_url_path:静态文件的URL前缀,默认为 '/static'
static_folder:存放静态文件(图片、CSS等)的目录,默认为应用程序根目录下的 'static' 目录
template_folder:存放模板文件(HTML文件)的目录,默认为应用程序根目录下的 'templates' 目录
1.默认参数
app = Flask(__name__)
其相应的文件目录结构如下:
访问127.0.0.1:5000/static/test.png
即可访问到图片
2.修改参数
app = Flask(__name__, static_url_path='/static_path/', static_folder='new_static')
相应的文件目录结构如下:
访问127.0.0.1:5000/static_path/test.png
即可访问到图片
应用程序配置
应用程序配置参数设置的是一个Web应用工程的相关信息,是集中管理项目的所有配置信息。比如配置:数据库的连接信息、日志的配置信息、自定义的配置信息
Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作
读取配置信息
在Flask中,可以使用config对象来为应用程序配置参数。常用的方法是使用一个Python文件来保存应用程序的配置信息,并从该文件中读取配置信息。
读取方式:
app.config.get(name)
app.config[name]
加载配置信息
1.从配置对象中加载
适用于⼀般存储业务相关的配置信息,如数据库配置、连接信息、各种初始化的配置信息等
使用方式:app.config.from_object(配置对象)
# 导入Flask类
from flask import Flask
# Flask类接收一个参数__name__
app = Flask(__name__)
# 配置对象
class MyConfig(object):
"""配置列表"""
KEY = 'Y7W7qg5CD9s5UmgKe5UdiY1bhdxbvkaq'
# 从配置对象中加载配置信息
app.config.from_object(MyConfig)
# 装饰器的作用是将路由映射到视图函数index
@app.route("/")
def index():
key = app.config['KEY']
print(key)
return key
# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
app.run()
2.从配置文件中加载
通常情况下,将一些应用程序需要的参数定义到一个 Python 文件中,并通过 Flask 的 config 对象进行加载
使用方式:app.config.from_pyfile('配置文件名')
。
1.创建并编写配置文件:
将应用程序可能需要的一些参数定义在一个Python文件中,例如将其命名为config.py
DEBUG = True
SECRET_KEY = 'my_secret_key'
DB_USERNAME = 'postgres'
DB_PASSWORD = 'password'
DB_HOSTNAME = 'localhost'
DB_PORT = 5432
2.在应用程序中加载配置:
from flask import Flask
app = Flask(__name__)
# 从配置文件中加载配置信息
app.config.from_pyfile('config.py')
3.使用配置:
@app.route("/")
def index():
debug_mode = app.config['DEBUG']
secret_key = app.config['SECRET_KEY']
db_username = app.config['DB_USERNAME']
db_password = app.config['DB_PASSWORD']
db_hostname = app.config['DB_HOSTNAME']
db_port = app.config['DB_PORT']
print(f'Debug mode: {debug_mode}')
print(f'Secret key: {secret_key}')
print(f'Database username: {db_username}')
print(f'Database password: {db_password}')
print(f'Database hostname: {db_hostname}')
print(f'Database port: {db_port}')
3.从环境变量中加载
在部署应用程序时,可以将一些机密信息以环境变量的形式添加到操作系统中。在 Flask 应用程序中,可以使用 `os.environ 对象读取这些环境变量的值,并设置到 Flask 的 config 对象中。
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。
Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息。注意:环境变量的值为配置文件的绝对路径。
使用方式:app.config.from_envvar('环境变量名')
假设有环境变量名:MY_SETTING
,变量值:D:\WorkSpace\Python\flask\setting.py
1.Linux中设置环境变量
vim ~/.bashrc
export MY_VARIABLE="my value"
source ~/.bashrc
2.开发工具设置环境变量
3.代码中获取环境变量对象,并设置环境变量
import os
# 添加环境变量
os.environ['MY_SETTING'] = 'D:\\WorkSpace\\Python\\flask\\setting.py'
import os
from flask import Flask
# 添加环境变量
os.environ['MY_SETTING'] = 'D:\\WorkSpace\\Python\\flask\\setting.py'
app = Flask(__name__)
# 从配置文件中加载配置信息
app.config.from_envvar('MY_SETTING', silent=False)
@app.route("/")
def index():
key = app.config['KEY']
print(key)
return key
silent:表示系统环境变量中没有设置相应值时是否抛出异常
False:没有值时报错通知,默认为False
True: 没有值也让Flask正常的运行下去
配置对象与环境变量结合
在实际项目中,常用的做法是:创建一个Flask app,并结合使用配置对象与环境变量加载配置
1.使用配置对象加载默认配置
2.使用环境变量加载不想出现在代码中的敏感配置信息
def create_flask_app(config):
"""
创建Flask应用
:param config: 配置对象
:return: Flask应用
"""
app = Flask(__name__)
app.config.from_object(config)
# 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
app.config.from_envvar("MY_SETTING", silent=True)
return app
class DefaultConfig(object):
KEY = 'Y7W7qg5CD9s5UmgKe5UdiY1bhdxbvkaq'
# 继承配置
class DevelopmentConfig(DefaultConfig):
DEBUG=True
# app = create_flask_app(DefaultConfig)
app = create_flask_app(DevelopmentConfig)
@app.route("/")
def index():
key = app.config['KEY']
print(key)
return key
app.run参数
在Flask中,app.run()方法会启动一个Web服务器来运行应用程序,该方法可以带有不同的参数来控制服务器的运行方式
常用的参数:
host:指定应用程序监听的 IP 地址,默认值为 '127.0.0.1',即只能通过本地访问。
port:指定应用程序监听的端口号,默认值是 5000。
debug:以调试模式启动应用程序,默认值为False。当设置为True的时候,应用程序会显示详细的错误信息及堆栈跟踪信息,方便在代码出现问题时进行调试。
threaded:表示如果应用程序需要多线程支持,该参数设置为 True 就可以开启多线程。默认值为 False,即单线程运行。
ssl_context:用于启用 SSL 安全通信协议的上下文对象。通常,应该创建该对象,并使用 .pem 格式的文件存储 SSL 的密钥和证书。
options:用于向底层 Werkzeug 服务器传递其他特定参数的字典对象。
注意:
在部署生产环境中,不能直接使用 Flask 自带的 Web 服务器来部署应用程序,应该使用专业的 Web 服务器,如 Nginx、Apache 等。
指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
DEBUG调试模式
程序代码修改后可以自动重启服务器
在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示
开发服务器启动方式
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
在命令行中运行
$ export FLASK_APP=helloworld
$ flask run
* Running on http://127.0.0.1:5000/
说明
环境变量 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运行在开发模式
在终端输入以下命令启动服务器,并以调试模式运行:
export FLASK_ENV=development
export FLASK_APP=your_app.py
flask run
扩展启动方式
$ export FLASK_APP=helloworld
$ python -m flask run
* Running on http://127.0.0.1:5000/
Python程序中手动启动
这个方法适合非常简单的开发,但是在生产环境中不建议使用。
from flask import Flask
app = Flask(__name__)
if __name__ == '__main__':
# 启动应用程序,并监听主机地址 localhost 和端口 5000
app.run(host='localhost', port=5000)
Pycharm启动
设置环境变量
D:\Development\Python\env\flask\Scripts\python.exe -m flask run
* Serving Flask app 'main'
* Debug mode: on
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
* Debugger is active!
* Debugger PIN: 552-902-892