flask框架整合大全(二)
Flask是一个轻量级的Web框架,它是用Python编写的。它具有极高的灵活性和可扩展性, 它提供了一组基本的构建Web应用程序所需的工具。 Flask没有许多Django和Spring Boot提供的内置功能,因此它更适合用于小型项目或快速原型开发。 开发人员可以根据项目需求自行选择和添加所需的第三方库。
扩展
Flask 是一个极其灵活的框架,你可以使用各种第三方扩展来增强它的功能。这些扩展可以帮助你解决各种不同的问题,扩展通常以 Python 包的形式提供,可以使用 pip 安装,并且在 Flask 应用程序中进行配置。扩展提供了许多预先定义好的功能,你可以快速地实现它们。
Flask常用扩展包:
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:简单而可扩展的管理接口的框架
邮件
基于web的应用程序通常需要具有向用户/客户端发送邮件的功能。Flask 支持发送电子邮件,但需要使用第三方库。常用的第三方库是 Flask-Mail,可以帮助你在 Flask 应用程序中发送电子邮件。
要使用Flask-Mail
,需要安装Flask-Mail
:
pip install Flask-Mail
使用 Flask-Mail 的步骤如下:
配置 Flask-Mail:在 Flask 应用程序中配置 Flask-Mail,代码如下:
from flask_mail import Mail
mail = Mail(app)
设置邮件服务器信息:在 Flask 应用程序的配置文件中设置以下邮件服务器信息:
MAIL_SERVER: 邮件服务器的主机名(例如 smtp.gmail.com)
MAIL_PORT: 邮件服务器的端口号(例如 587 表示 TLS,465 表示 SSL)
MAIL_USE_TLS: 设为 True 如果邮件服务器需要 TLS 加密
MAIL_USE_SSL: 设为 True 如果邮件服务器需要 SSL 加密
MAIL_USERNAME: 邮件帐户的用户名
MAIL_PASSWORD: 邮件帐户的密码
MAIL_DEFAULT_SENDER: 应用发送的电子邮件的默认发件人地址
代码如下:
app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'youremail@gmail.com'
app.config['MAIL_PASSWORD'] = 'yourpassword'
app.config['MAIL_DEFAULT_SENDER'] = ('Your Name', 'youremail@gmail.com')
mail = Mail(app)
发送电子邮件:使用 Flask-Mail 发送电子邮件,代码如下:
from flask_mail import Message
msg = Message('Subject', sender='from@example.com', recipients=['to@example.com'])
msg.body = 'Text Body'
msg.html = '<h1>HTML Body</h1>'
mail.send(msg)
发送各类邮件
Flask-Mail 是一个强大的邮件发送库,支持多种电子邮件发送场景,如:简单文本邮件、HTML 邮件、附件邮件等。
发送简单文本邮件实例:
from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
mail = Mail(app)
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'your_email@gmail.com'
app.config['MAIL_PASSWORD'] = 'your_email_password'
@app.route('/send_email')
def send_email():
msg = Message('Hello', sender='your_email@gmail.com', recipients=['recipient_email@gmail.com'])
msg.body = 'Hello Flask message sent from Flask-Mail'
mail.send(msg)
return 'Email sent!'
发送HTML邮件实例:
from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
mail = Mail(app)
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'your_email@gmail.com'
app.config['MAIL_PASSWORD'] = 'your_email_password'
@app.route('/send_email')
def send_email():
msg = Message('Hello', sender='your_email@gmail.com', recipients=['recipient_email@gmail.com'])
msg.html = '<b>Hello Flask message sent from Flask-Mail</b>'
mail.send(msg)
return 'Email sent!'
发送附件邮件实例:
from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
mail = Mail(app)
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'your_email@gmail.com'
app.config['MAIL_PASSWORD'] = 'your_email_password'
@app.route('/send_email')
def send_email():
msg = Message('Hello', sender='your_email@gmail.com', recipients=['recipient_email@gmail.com'])
with app.open_resource("file.pdf") as fp:
msg.attach("file.pdf", "application/pdf", fp.read())
mail.send(msg)
return 'Email sent!'
蓝图
蓝图(Blueprints)是 Flask 的一种功能分离方式,能够帮助我们将一个大的 Flask 应用分解为多个更小的模块。
每个蓝图都是一个 Flask 应用,并可以独立地注册到主 Flask 应用中。每个蓝图可以有自己的视图、静态文件、模板等,可以自由地定义路由。
使用蓝图可以帮助我们将一个大的 Flask 应用分解为多个可以独立扩展和维护的模块。
使用蓝图的基本步骤如下:
创建蓝图:使用 Flask 库中的 Blueprint 函数创建一个蓝图对象,并为其命名。
注册路由:在蓝图对象中注册视图函数并分配 URL 路径。
注册蓝图:在主 Flask 应用中注册蓝图,使其生效。
创建模板和静态文件:创建蓝图对象所需的模板和静态文件,以便被使用。
运行 Flask 应用:使用 Flask 的 run 函数运行主 Flask 应用,并在浏览器中查看生成的页面。
代码实现:
from flask import Flask, Blueprint
# 创建蓝图
mod = Blueprint("my_blueprint", __name__)
# 注册路由
@mod.route("/")
def index():
return "Hello World!"
# 创建 Flask 应用
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(mod)
# 运行 Flask 应用
if __name__ == "__main__":
app.run()
蓝图中的静态资源与单一应用相同。需要使用同样的方式访问静态资源。例如:在html模板中访问图片,链接的形式为 /static/<filename>
可以通过在蓝图中指定静态资源文件夹的路径来访问蓝图内的静态资源。代码示例如下:
from flask import Blueprint, render_template
bp = Blueprint('my_blueprint', __name__, static_folder='static')
@bp.route('/')
def index():
return render_template('index.html')
注册不同模块的蓝图
在 Flask 中,可以在不同的模块中定义蓝图,并在整个应用中使用它们。
假设有三个包,分别有三个不同的蓝图,目录结构如下:
app/
|-- __init__.py
|-- first/
| |-- __init__.py
| |-- views.py
|-- second/
| |-- __init__.py
| |-- views.py
|-- third/
| |-- __init__.py
| |-- views.py
|-- main.py
在每个模块中定义蓝图:
# first/views.py
from flask import Blueprint
first_bp = Blueprint('first', __name__)
@first_bp.route('/first')
def first_view():
return 'This is the first blueprint'
# second/views.py
from flask import Blueprint
second_bp = Blueprint('second', __name__)
@second_bp.route('/second')
def second_view():
return 'This is the second blueprint'
# third/views.py
from flask import Blueprint
third_bp = Blueprint('third', __name__)
@third_bp.route('/third')
def third_view():
return 'This is the third blueprint'
在主模块中,使用以下代码注册每个蓝图:
# main.py
from flask import Flask
from .first import first_bp
from .second import second_bp
from .third import third_bp
def create_app():
app = Flask(__name__)
app.register_blueprint(first_bp)
app.register_blueprint(second_bp)
app.register_blueprint(third_bp)
return app
这样,就可以在整个 Flask 应用中管理不同模块的蓝图了。如果模块数量很多,可以使用一个单独的模块(例如blueprints.py
)来管理蓝图的注册,以便保持代码的整洁和可维护性。