Flask 是一个轻量级的 Python Web 框架,以其简洁、灵活和易扩展的特性广受欢迎。接下来我将从多个维度详细介绍 Flask 框架。

1. Flask 核心特性

微框架设计

  • 轻量级:核心功能精简,只包含基本组件
  • 可扩展:通过扩展添加所需功能
  • 无强制约束:不强制使用特定数据库或模板引擎

主要组件

  • 路由系统:URL 到 Python 函数的映射
    点击了解详情
  • 模板引擎:Jinja2 集成
    详情点击这里了解jinja2
  • 开发服务器:内置开发用 Web 服务器
  • 调试工具:交互式调试器和重载器
  • 单元测试支持:提供测试客户端

2. Flask 应用结构

最小应用示例

from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return 'Hello, World!'if __name__ == '__main__':app.run()

典型项目结构

/myflaskapp/static       # 静态文件(CSS, JS, 图片)/templates    # 模板文件/venv         # 虚拟环境(可选)app.py        # 主应用文件config.py     # 配置文件requirements.txt # 依赖列表

3. 路由系统详解

基本路由

@app.route('/')
def index():return 'Home Page'@app.route('/about')
def about():return 'About Page'

动态路由

@app.route('/user/<username>')
def show_user(username):return f'User: {username}'@app.route('/post/<int:post_id>')
def show_post(post_id):return f'Post #{post_id}'

HTTP 方法处理

@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':return do_login()else:return show_login_form()

4. 请求与响应处理

请求对象

from flask import request@app.route('/search')
def search():query = request.args.get('q', '')  # GET参数return f'Searching for: {query}'

响应控制

from flask import make_response@app.route('/custom')
def custom_response():response = make_response('Custom Response')response.headers['X-Custom-Header'] = 'Value'response.status_code = 201return response

重定向与错误

from flask import redirect, abort@app.route('/old')
def old_page():return redirect('/new')@app.route('/admin')
def admin():abort(401)  # 未授权访问

5. 模板系统 (Jinja2)

基本模板使用

from flask import render_template@app.route('/hello/<name>')
def hello(name):return render_template('hello.html', name=name)

模板文件示例 (hello.html)

<!doctype html>
<html>
<head><title>Hello</title></head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

模板特性

  • 变量插值{{ variable }}
  • 控制结构{% if %}, {% for %}
  • 模板继承{% extends "base.html" %}
  • 宏定义{% macro render_comment(comment) %}

6. 数据库集成

Flask-SQLAlchemy 示例

from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(20), unique=True, nullable=False)@app.route('/users')
def users():users = User.query.all()return render_template('users.html', users=users)

7. 用户会话与认证

基本会话管理

from flask import sessionapp.secret_key = 'your-secret-key'@app.route('/login', methods=['POST'])
def login():session['username'] = request.form['username']return redirect('/')@app.route('/logout')
def logout():session.pop('username', None)return redirect('/')

Flask-Login 扩展

from flask_login import LoginManager, UserMixin, login_userlogin_manager = LoginManager(app)class User(UserMixin, db.Model):# 用户模型定义@login_manager.user_loader
def load_user(user_id):return User.query.get(int(user_id))@app.route('/login')
def login():user = User.query.first()login_user(user)return 'Logged in'

8. 配置管理

配置方式

# 直接设置
app.config['DEBUG'] = True# 从对象加载
app.config.from_object('configmodule.ConfigClass')# 从文件加载
app.config.from_pyfile('config.py')# 从环境变量加载
app.config.from_envvar('APP_CONFIG_FILE')

常用配置项

DEBUG = True  # 调试模式
SECRET_KEY = 'your-secret-key'  # 会话加密
SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db'  # 数据库URI

9. 蓝图(Blueprints) - 模块化应用

创建蓝图

# admin/__init__.py
from flask import Blueprintbp = Blueprint('admin', __name__, url_prefix='/admin')@bp.route('/')
def admin_index():return 'Admin Page'

注册蓝图

from admin import bp as admin_bp
app.register_blueprint(admin_bp)

10. 扩展生态系统

Flask 的强大之处在于其丰富的扩展生态系统:

  • 数据库:Flask-SQLAlchemy, Flask-MongoEngine
  • 表单处理:Flask-WTF
  • 用户认证:Flask-Login, Flask-Security
  • REST API:Flask-RESTful, Flask-RESTx
  • 测试:Flask-Testing
  • 部署:Flask-SocketIO, Flask-Caching

11. 部署选项

开发服务器

if __name__ == '__main__':app.run(debug=True)

生产部署选项

  • WSGI 服务器:Gunicorn, uWSGI
  • 反向代理:Nginx, Apache
  • 平台服务:Heroku, AWS, Google App Engine

12. 最佳实践

  1. 应用工厂模式
def create_app(config=None):app = Flask(__name__)app.config.from_object(config or Config)# 初始化扩展db.init_app(app)# 注册蓝图app.register_blueprint(main_bp)return app
  1. 使用环境变量管理配置
import os
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') or 'dev-key'
  1. 错误处理
@app.errorhandler(404)
def not_found(error):return render_template('404.html'), 404

总结

Flask 是一个灵活而强大的微框架,它:

  • 提供核心的 Web 开发功能而不强加约束
  • 通过扩展可以轻松添加所需功能
  • 适合从小型应用到大型复杂项目的各种规模
  • 强调代码的可读性和简洁性

无论是构建简单的 REST API 还是复杂的 Web 应用程序,Flask 都是一个优秀的选择。它的学习曲线平缓,但随着对框架理解的深入,你可以逐步构建出高度定制化的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91790.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91790.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91790.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率 多维随机变量与分布

一、二维1、二维随机变量及其分布假设E是随机试验&#xff0c;Ω是样本空间&#xff0c;X、Y是Ω的两个变量&#xff1b;(X,Y)就叫做二维随机变量或二维随机向量。X、Y来自同一个样本空间。联合分布函数 F(x,y)P(X≤x,Y≤y)&#xff0c;即F(x,y)表示求(x,y)左下方的面积。 F(x,…

Spring AI MCP:解锁大模型应用开发新姿势

一、AI 浪潮下的新利器 ——Spring AI MCP 登场在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最耀眼的技术明星&#xff0c;正以前所未有的速度渗透到各个领域&#xff0c;深刻改变着我们的生活和工作方式。从智能语音助手到图像识别技术&#xff0c;…

ThinkPHP5x,struts2等框架靶场复现

ThinkphpThinkphp5x远程命令执行及getshell首先我们先找一个环境&#xff0c;或者自己搭建一个环境fofa&#xff1a;body"ThinkPHP V5"搭建&#xff1a;vulhub/thinkphp/5-rcedocker-compose up -d然后去访问我们的环境远程命令执行/?sindex/think\app/invokefuncti…

Hyperliquid:揭秘高性能区块链共识引擎HyperBFT

大家好&#xff0c;今天我们一起探讨Hyperliquid这个高性能区块链项目以及它背后的共识引擎。Hyperliquid能在拥挤的去中心化交易赛道&#xff08;DEX&#xff09;中脱颖而出&#xff0c;很大程度上要归功于其高效的共识机制——HyperBFT。 为了彻底搞懂HyperBFT&#xff0c;我…

大模型开发框架LangChain之构建知识库

1.前言 为了避免 llm正确的废话和幻觉&#xff0c;知识库可以说是现在开发 agent的必备了。同时&#xff0c;作为 rag中的 r&#xff0c;知识库召回的成功率会极大的影响 llm的最终回复效果。一般&#xff0c;会把知识库召回的内容作为背景知识给到 llm&#xff0c;并在 prompt…

NPM打包时,报reason: getaddrinfo ENOTFOUND registry.nlark.com

先说解决方法&#xff1a;将 package-lock.json 文件中的 registry.nlark.com 改为 registry.npmmirror.com现象&#xff1a;npm ERR! code ENOTFOUND npm ERR! syscall getaddrinfo npm ERR! errno ENOTFOUND npm ERR! network request to https://registry.nlark.com/url-too…

python内置库os与sys的区别是什么?分别能实现什么功能?

Python 的 os 和 sys 是两个功能截然不同但都非常重要的内置库&#xff0c;它们分别服务于不同的交互场景&#xff1a;前者专注于与操作系统交互&#xff0c;后者专注于与 Python 解释器本身交互。以下是详细解析&#xff1a; 一、os 库&#xff1a;操作系统交互接口 os 库&…

【云计算】云主机的亲和性策略(一):快乐旅行团

《云主机的亲和性策略》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 云主机的亲和性策略&#xff08;一&#xff09;&#xff1a;快乐旅行团2️⃣ 云主机的亲和性策略&#xff08;二&#xff09;&#xff1a;集群节点组3️⃣ 云主机的亲和性策略&#xff08;三&#xf…

USRP捕获手机/路由器数据传输信号波形(下)

目录&#xff1a; USRP捕获手机/路由器数据传输信号波形&#xff08;上&#xff09; USRP捕获手机/路由器数据传输信号波形&#xff08;中&#xff09; USRP捕获手机/路由器数据传输信号波形&#xff08;下&#xff09; 四、路由器MIMO-OFDM系统 本文深入分析采集手机与路由…

位运算在权限授权中的应用及Vue3实践

在现代前端应用中&#xff0c;权限管理是一个至关重要的功能模块。随着应用复杂度的提示功能&#xff0c;权限细粒度越来越精细&#xff0c;如何高效地管理和判断权限成为前端开发的一大挑战。位运算作为一种高效的运算方式&#xff0c;在权限管理领域有着独特的优势。本文将详…

面试实战,问题二十二,Java JDK 17 有哪些新特性,怎么回答

Java JDK 17 新特性面试回答指南 作为一名Java开发者&#xff0c;了解JDK 17的新特性是面试中的关键点。JDK 17&#xff08;Java SE 17&#xff09;于2021年9月发布&#xff0c;是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;引入了多项改进以提升开发效率、安全性…

【MySQL安全】什么是SQL注入,怎么避免这种攻击:前端防护、后端orm框架、数据库白名单

基本概念SQL注入是OWASP Top 10安全风险之一&#xff0c;它利用了应用程序对用户输入数据的不当处理。当应用程序直接将用户输入拼接到SQL查询中而没有进行适当的过滤或转义时&#xff0c;就可能发生SQL注入攻击。攻击原理假设有一个登录表单的SQL查询&#xff1a;SELECT * FRO…

pyqt5显示任务栏菜单并隐藏主窗口,环境pyqt5+vscode

环境 pyqt5vscode 环境搭建见 https://blog.csdn.net/huiaifen/article/details/125175261 新建一个QMainWindow 1 在VSCode的资源管理器中&#xff0c;右键选择 PYQT:New Form&#xff0c;打开Qt Designer2 在打开的窗口中选 “Main Window”&#xff0c;然后选“创建”3 直接…

SpringBoot项目数据脱敏(自定义注解)

文章目录前言一.配置1.脱敏类型枚举&#xff1a;DesensitizeType2.注解&#xff1a;Desensitize3.序列化类&#xff1a;DesensitizeJsonSerializer4.工具类&#xff1a;DesensitizeUtil二、测试&#xff1a;DesensitizeTest三、效果展示总结前言 在互联网应用中&#xff0c;用户…

PSO-TCN-BiLSTM-MATT粒子群优化算法优化时间卷积神经网络-双向长短期记忆神经网络融合多头注意力机制多特征分类预测/故障诊断Matlab实现

基本介绍 1.Matlab实现PSO-TCN-BiLSTM-MATT粒子群算法优化时间卷积神经网络-双向长短期记忆神经网络融合多头注意力机制多特征分类预测&#xff0c;PSO-TCN-BiLSTM-Multihead-Attention&#xff1b; 多头自注意力层 (Multihead-Self-Attention)&#xff1a;Multihead-Self-Atte…

第一篇:Linux 运维入门:虚拟机部署与基础环境配置

目录 一、准备工作与环境规划 二、虚拟机网络配置 1、虚拟网络编辑器设置 2、系统网络配置 3、主机名配置 三、Hosts 文件与 SSH 免密配置 配置 hosts 文件编辑/etc/hosts文件实现主机名解析&#xff1a; 分发 hosts 文件到其他节点 SSH 免密登录配置在 zhangsan101 上…

(一)全栈(react配置/https支持/useState多组件传递/表单提交/React Query/axois封装/Router)

文章目录 项目地址 一、基础配置 1.1 支持https 1. 安装所需要的包 2. 配置 1.2 常用 1. 字符串拼接 二、组件 2.1 useState组件传递 1. App里初始化useState 2. useState和方法的传递 3. 接收传递来的状态和方法 2.2 表单提交 1. 表单组件处理用户输入数据 2. App传来的submit…

【abc417】E - A Path in A Dictionary

Problem StatementYou are given a simple connected undirected graph G with N vertices and M edges. The vertices of G are numbered vertex 1, vertex 2, …, vertex N, and the i-th (1≤i≤M) edge connects vertices Ui​ and Vi​.Find the lexicographically smalle…

linux火焰图

火焰图简介火焰图是一种性能分析的可视化工具&#xff0c;它将CPU的调用栈&#xff08;Call Stack&#xff09;信息以矩形火焰的形式展现出来。Y轴&#xff1a;代表调用栈的深度&#xff08;函数A调用了函数B&#xff0c;B就叠在A上面&#xff09;。X轴&#xff1a;代表CPU的抽…

解剖 .NET 经典:从 Component 到 BackgroundWorker

1️⃣ 背景与定位在 .NET Framework 2.0 时代&#xff0c;微软引入了 BackgroundWorker 来解决 WinForm/WPF 场景下“耗时操作阻塞 UI 线程”的问题&#xff1b;而 Component 早在 1.0 就已存在&#xff0c;是所有可视化/非可视化设计器的“基类”。理解这两者的源码与机制&…