Flask 简介
Flask 是一个轻量级的 Python Web 开发框架。它具有简单、灵活、易扩展的特点,适用于构建各种类型的小型和中型 Web 应用程序。
Flask 的核心思想是将 Web 开发过程中的各个部分进行分离,例如请求处理、URL 路由、模板渲染等,使得开发者能够更加专注于业务逻辑的实现。它提供了一系列工具和扩展,帮助开发者快速实现需求。
与其他 Web 框架相比,Flask 的优势在于它的简单性和灵活性,这使得它非常适合用于快速原型开发和小型 Web 应用的构建。它没有复杂的配置和约束,可以让开发者快速上手,并且具有良好的扩展性,可以根据需求添加各种插件和扩展。
总体而言,Flask 是一个非常优秀的 Web 开发框架,适用于各种场景,是快速构建 Web 应用的理想选择。
Flask 基本用法
Flask 的基本用法如下:
安装 Flask:在命令行或终端中执行以下命令,即可完成安装。
pip install Flask
创建 Flask 应用:在 Python 文件中导入 Flask 库,创建 Flask 应用对象,代码如下:
from flask import Flask
app = Flask(__name__)
定义路由:使用 Flask 的 route 装饰器定义请求 URL 和对应的处理函数,代码如下:
@app.route('/')
def index():
return 'Hello, Flask!'
启动 Flask 应用:使用 Flask 应用对象的 run 方法启动 Flask 应用,代码如下:
python
Copy code
if __name__ == '__main__':
app.run()
测试 Flask 应用:在浏览器中访问 http://localhost:5000,查看 Flask 应用的输出。
以上是 Flask 的基本用法,你可以通过编写代码实现更复杂的功能,例如处理表单数据、使用模板渲染页面、设置路由参数等
Flask 高级用法
Flask 高级用法包括:
模板渲染:Flask 使用 Jinja2 模板引擎进行模板渲染,可以动态生成 HTML 页面。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
在模板文件 index.html 中使用 Jinja2 语法,例如:
Flask 高级用法 - 模板渲染
{{ title }}
{{ message }}
表单处理:Flask 支持处理 HTML 表单数据,例如:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
username = request.form['username']
return 'Hello, {}!'.format(username)
return render_template('index.html')
在模板文件 index.html 中创建 HTML 表单,例如:
Flask 高级用法 - 表单处理
路由参数:Flask 可以在 URL 中包含参数,并在处理函数中获取参数值。
from flask import Flask
app = Flask(__name__)
@app.route('/user/')
def user(username):
return 'Hello, {}!'.format(username)
在浏览器中访问
http://localhost:5000/user/flask,即可看到 "Hello, flask!" 的输出。
数据库:Flask 支持使用多种数据库,例如 SQLite、MySQL、PostgreSQL 等,可以使用 Flask-SQLAlchemy 模块简化数据库操作。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
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)
def __repr__(self):
return '' % self.username
@app.route('/')
def index():
user = User.query.first()
return 'Hello, {}!'.format(user.username)
文件上传:Flask 支持文件上传,例如:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
file = request.files['file']
file.save('uploads/' + file.filename)
return '文件上传成功!'
return render_template('index.html')
在模板文件 index.html 中创建 HTML 文件上传表单,例如:
Flask 高级用法 - 文件上传
认证和授权:Flask 可以使用 Flask-Login 模块实现用户认证和授权功能。
from flask import Flask, redirect, url_for, request, render_template
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required
app = Flask(__name__)
app.secret_key = 'secret_key'
login_manager = LoginManager()
login_manager.init_app(app)
class User(UserMixin):
def __init__(self, id):
self.id = id
self.username = 'user' + str(id)
self.password = self.username + '_secret'
def __repr__(self):
return '' % self.username
users = [User(id) for id in range(1, 6)]
@login_manager.user_loader
def load_user(user_id):
return users[int(user_id) - 1]
@app.route('/')
def index():
return '首页'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
for user in users:
if user.username == username and user.password == password:
login_user(user)
return redirect(url_for('protected'))
return '用户名或密码错误!'
return render_template('login.html')
@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('index'))
@app.route('/protected')
@login_required
def protected():
return '登录成功!'
if __name__ == '__main__':
app.run(debug=True)
在上面的代码中,通过 login_manager.user_loader 装饰器为 Flask-Login 指定一个用户加载回调函数,在这个回调函数中,根据给定的用户 ID 返回一个用户对象。
通过 @login_required 装饰器保护了一些页面,要求登录后才能访问,否则会被重定向到登录页面。
如果你需要更多信息,请参阅 Flask-Login 官方文档