简介
Flask 是一个用 Python 编写的轻量级 Web 应用框架。
安装 pip install Flask
入门demo:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
Flask 基本概念
以下是 Flask 的主要基本概念的详细解析:
-
路由:路由是 URL 到 Python 函数的映射。Flask 允许你定义路由,这样当特定的 URL 被访问时,就会调用相应的函数。
-
视图函数:视图函数是处理请求并返回响应的 Python 函数。它们通常接收请求对象作为参数,并返回响应对象。
-
请求对象:请求对象包含了客户端发送的请求信息,如请求方法、URL、请求头、表单数据等。
-
响应对象:响应对象包含了发送给客户端的响应信息,如状态码、响应头、响应体等。
-
模板:Flask 使用 Jinja2 模板引擎来渲染 HTML 模板。模板允许你将 Python 代码嵌入到 HTML 中,从而动态生成网页。
-
应用工厂:应用工厂是一个 Python 函数,它创建并返回一个 Flask 应用实例。这允许你配置和初始化你的应用,并且可以创建多个应用实例。
-
配置对象:Flask 应用有一个配置对象,你可以使用它来设置各种配置选项,如数据库连接字符串、调试模式等。
-
蓝图:蓝图是 Flask 中的一个组织代码的方式,它允许你将相关的视图函数、模板和静态文件组织在一起,并且可以在多个应用中重用。
-
静态文件:静态文件是不会被服务器端执行的文件,如 CSS、JavaScript 和图片文件。Flask 提供了一个简单的方法来服务这些文件。
-
扩展:Flask 有许多扩展,可以添加额外的功能,如数据库集成、表单验证、用户认证等。
-
会话:Flask 使用客户端会话来存储用户信息,这允许你在用户浏览你的应用时记住他们的状态。
-
错误处理:Flask 允许你定义错误处理函数,当特定的错误发生时,这些函数会被调用。
蓝图--模块化开发
Flask 的蓝图(Blueprints)是一种组织代码的机制,允许你将 Flask 应用分解成多个模块。这样可以更好地组织应用逻辑,使得应用更具可维护性和可扩展性。
每个蓝图可以有自己的路由、视图函数、模板和静态文件,这样可以将相关的功能分组。
通过使用蓝图,你可以将 Flask 应用拆分成多个模块,每个模块处理相关的功能,使得代码更加清晰和易于管理。
yourapp/
│
├── app.py
├── auth/
│ ├── __init__.py
│ └── routes.py
│
└── blog/
├── __init__.py
└── routes.py
创建蓝图:在独立的模块中定义蓝图,并指定路由和视图函数。
from flask import Blueprint, render_template, request, redirect, url_for
auth = Blueprint('auth', __name__)
@auth.route('/login')
def login():
return render_template('login.html')
@auth.route('/logout')
def logout():
return redirect(url_for('auth.login'))
@auth.route('/register')
def register():
return render_template('register.html')
注册蓝图:在主应用中注册蓝图,并设置路由前缀。
from flask import Flask
app = Flask(__name__)
# 导入蓝图
from auth.routes import auth
from blog.routes import blog
# 注册蓝图
app.register_blueprint(auth, url_prefix='/auth')
app.register_blueprint(blog, url_prefix='/blog')
if __name__ == '__main__':
app.run(debug=True)
使用蓝图中的模板和静态文件:将模板和静态文件放在蓝图的 templates
和 static
文件夹中。
使用请求钩子和错误处理:在蓝图中定义请求钩子和错误处理函数。
Flask 数据库操作
SQLAlchemy 是一个强大的 ORM 库,可以简化数据库操作,通过 Python 对象与数据库表进行交互。
Flask-SQLAlchemy 是 Flask 的一个扩展,用于集成 SQLAlchemy。
Flask 中间件
Flask 的中间件(middleware)是对请求和响应进行处理的钩子,通常用于在请求到达视图函数之前或在响应发送到客户端之前执行一些操作。中间件可以用于日志记录、请求修改、响应修改等。
钩子函数
请求钩子允许你在处理请求的不同阶段插入代码,Flask 提供了几种钩子来处理请求生命周期的不同阶段:
before_request:在每个请求处理之前执行。
after_request:在每个请求处理之后执行。
teardown_request:请求处理结束后,无论是否发生异常都会执行。
before_first_request:仅在应用第一次处理请求之前执行。
自定义中间件
Flask 还允许你创建自定义中间件类,这些中间件类可以在请求和响应处理的各个阶段进行操作。
Flask restful
flask-restful的功能特性
资源驱动:以资源为中心的设计哲学,便于构建RESTful API。
简洁易用:简化了Flask应用中RESTful API的开发流程。
扩展性强:提供了丰富的扩展和功能,支持自定义序列化器和请求解析。
强大的文档支持:自动生成API文档,方便开发者理解和测试。
社区支持:拥有活跃的社区,丰富的资源和问题解答。
资源管理
Flask-RESTful 允许我们以资源(Resource)的形式组织 API,每个资源对应一个类,并处理特定的 HTTP 方法。
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class UserResource(Resource):
def get(self, user_id):
# 获取用户信息
return {'user_id': user_id}
def post(self, user_id):
# 创建新用户
return {'user_id': user_id}, 201
def put(self, user_id):
# 更新用户信息
return {'user_id': user_id}
def delete(self, user_id):
# 删除用户
return {'user_id': user_id}
api.add_resource(UserResource, '/users/<int:user_id>')
参考文档
flask-restful,一个不可思议的Python库!_flask restful-优快云博客
Python flask-restful框架讲解 - 尘世风 - 博客园 (cnblogs.com)
https://wizardforcel.gitbooks.io/flask-extension-docs/content/flask-restful.html