Flask是一个基于开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架对于Werkzeug本质是socket服务端,其用于接收http请求并对请求进行预处理,然后 触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2来实现对模板的处理,即模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
Python
https://www.python.org/
Pycharm社区版
https://www.jetbrains.com/pycharm/download
新建项目
选择Flask
虚拟环境默认
创建
在计算机中搭建好Flask开发环境后,便可以着手编写Flask程序。
app = Flask(_name_)
除了必选参数外,还可以根据需要向构造方法中传入以下几个可选参数。
使用开发服务器有两种方式:
1.通过命令行使用开发服务器
2.通过代码使用开发服务器,即调用Flask类对象的run()方法
例如
app.run()
以上代码在调用run()方法时没有传入任何参数,该方法通常包含以下几个参数。
多说一句:建议在使用run()方法的时候将debug参数的值设为True。(理由:这样在运行程序的过程中若代码发生变化,开发服务器会自动重启并重新运行程序,另外在代码发生异常时,程序会输出相应的异常信息,可提高调试程序的效率。)
在Flask中,路由和视图是密切相关的概念。
首先,在Flask中我们可以通过装饰器@app.route()
来定义路由规则。这个装饰器可以用于标记一个函数(通常是一个视图函数)是一个处理请求的端点。装饰器的参数是URL路径,可以使用特定的规则来匹配请求的路径。例如:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, World!'
上述代码中,@app.route('/')
定义了一个根路由,即匹配根路径/
的请求,并将其分发给index()
函数进行处理。当用户访问根路径时,会返回"Hello, World!"。
接下来,视图函数就是处理特定路由请求的函数。在Flask中,视图函数接收路由函数传递的请求,并根据业务逻辑生成响应。视图函数可以返回字符串、HTML模板、JSON数据等,具体根据业务需求决定。
@app.route('/user/<username>')
def user(username):
return f'Hello, {username}!'
上述代码中,@app.route('/user/<username>')
定义了一个动态路由,即匹配形如/user/<username>
的请求,并将其中的<username>
作为参数传递给user()
函数进行处理。当用户访问/user/john
时,会返回"Hello, john!"。
Flask中的路由和视图共同构成了Web应用程序的核心,通过合理的路由设计,将不同的请求分发给不同的视图函数,可以实现功能的划分和请求的处理。视图函数通过处理请求的数据和业务逻辑,生成相应的内容并返回给用户。Flask提供了简洁、灵活的路由和视图机制,方便我们开发出高效、可扩展的Web应用。
在Flask程序中,可以使用配置项来配置应用程序的一些参数和设置。配置项可以帮助我们灵活地调整应用程序的行为和性能。以下是一些常用的Flask配置项的介绍:
这些只是一些常用的配置项,Flask还提供了更多的配置项可以根据实际需求进行设置。配置项可以通过app.config
字典对象来访问和修改,也可以通过配置文件、环境变量等方式进行配置。在开发和部署应用程序时,根据需要合理配置这些参数,以达到最佳的效果和性能。
在Flask程序中,可以使用三种方式来配置信息的使用:通过访问字典元素、导入文件和导入对象。下面将详细介绍每种方式:
在Flask中,配置信息被存储在一个名为 config
的字典中,可以通过访问字典元素的方式来读取配置项的值。例如:
from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'
secret_key = app.config['SECRET_KEY']
上述代码中,使用 app.config['SECRET_KEY']
的方式来读取 SECRET_KEY
配置项的值。
可以将配置项保存在一个单独的配置文件中,然后使用 app.config.from_pyfile()
方法将配置文件导入应用程序。例如,创建一个名为 config.py
的配置文件:
DEBUG = True
SECRET_KEY = 'mysecretkey'
然后在应用程序中导入配置文件:
from flask import Flask
app = Flask(__name__)
app.config.from_pyfile('config.py')
debug_mode = app.config['DEBUG']
secret_key = app.config['SECRET_KEY']
通过上述代码,可以使用 app.config['DEBUG']
和 app.config['SECRET_KEY']
访问导入的配置项。
另一种方式是将配置项保存在一个对象中,并将该对象导入应用程序。可以通过创建一个 Python 文件来定义配置类,并在应用程序中导入该类。例如,创建一个名为 config.py
的配置文件:
class Config:
DEBUG = True
SECRET_KEY = 'mysecretkey'
然后在应用程序中导入配置类:
from flask import Flask
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
debug_mode = app.config['DEBUG']
secret_key = app.config['SECRET_KEY']
通过上述代码,可以通过 app.config['DEBUG']
和 app.config['SECRET_KEY']
访问导入的配置项。
无论使用哪种方式,配置信息的使用都是相似的,可以根据需要选择最适合的方式来配置和使用应用程序中的配置信息。
Flask是一个轻量级的Web框架,它提供了基本的功能,但也支持通过扩展包来增加更多功能,以避免程序代码变得冗杂且复杂,还能提高程序的可扩展性。
常用的Flask扩展包如表所示。
扩展包 | 说明 |
Flask - SQLAlchemy | 操作数据库 |
Flask -Migrate | 管理迁移数据库 |
Flask -Mail | 邮件 |
Flask -WTF | 表单 |
Flask -Babel | 提供国际化和本地支持 |
Flask -Script | 插入脚本 |
Flask -Login | 认证用户状态 |
Flask -OpenID | 认证 |
Flask -RESTful | 开发REST API工具 |
Flask -Bootstrap | 集成前端Twitter Bootstrap框架 |
Flask -Moment | 本地化日期和时间 |
Flask -Admin | 简单和可扩展的管理接口框架 |
要在Flask程序中使用扩展包(以Flask-SQLAlchemy为例),需要进行以下步骤:
安装Flask-SQLAlchemy:
使用pip命令安装Flask-SQLAlchemy:
pip install flask-sqlalchemy
导入Flask和Flask-SQLAlchemy:
在程序的入口文件中,导入Flask和Flask-SQLAlchemy:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
创建Flask应用对象:
创建一个Flask应用对象:
app = Flask(__name__)
配置数据库连接参数:
配置数据库连接参数,如数据库的URL、用户名、密码等。例如,使用SQLite数据库作为示例:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
SQLALCHEMY_DATABASE_URI
指定数据库的连接URL,这里使用SQLite数据库并指定数据库文件的路径。SQLALCHEMY_TRACK_MODIFICATIONS
配置项用于关闭对模型修改的跟踪。
创建SQLAlchemy对象:
实例化SQLAlchemy对象,并将其与Flask应用关联起来:
db = SQLAlchemy(app)
这个db
对象用于定义数据库模型类和执行数据库操作。
定义数据库模型类:
使用db.Model
基类创建数据库模型类。例如,创建一个名为User
的模型类:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
这个模型类定义了一个名为User
的表,它有一个整型的id
字段、一个字符串的username
字段和一个字符串的email
字段。
创建数据库表:
在程序中的某个位置,例如在if __name__ == '__main__':
块下,使用以下代码创建数据库表:
if __name__ == '__main__':
db.create_all()
这将根据模型类的定义自动创建数据库表。
通过以上步骤,你可以在Flask程序中使用Flask-SQLAlchemy扩展包,并使用SQLAlchemy对象来操作数据库。你可以通过db.session
对象执行各种数据库操作,例如添加、查询、更新或删除数据。
请注意,这只是使用Flask-SQLAlchemy的基本步骤,你可以根据实际需求和文档了解更多功能和用法。
此外,尽管扩展包可以用于快速实现某些功能,但是某些扩展包可能会存在一些潜在的bug,不同的扩展包之间甚至可能会出现冲突。因此我们在选择扩展包时,应该尽量从实际需求的角度出发,对扩展包的质量和兼容性多做考量,以保证实现效率与灵活性的平衡。
因篇幅问题不能全部显示,请点此查看更多更全内容