1. Flask 是什么?

Flask 是一个 微框架(Microframework),特点包括:

  • 轻量灵活:核心仅包含路由和模板引擎,其他功能通过扩展实现
  • 易于学习:代码直观,适合快速开发小型应用和 API
  • 高度可定制:不强制项目结构,可自由选择组件

2. 核心组件

(1) 最小应用示例
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello World!"if __name__ == '__main__':app.run(debug=True)
  • 路由@app.route() 装饰器定义 URL
  • 开发服务器app.run() 启动调试模式
(2) 路由与变量规则
@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 ID: {post_id}'
  • 转换器<int:var><float:var><path:var>
(3) 请求与响应
from flask import request, jsonify@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':return jsonify({'status': 'success'})else:return render_template('login.html')
  • 请求对象request.args (GET)、request.form (POST)
  • 响应对象jsonify() 返回 JSON
(4) 模板渲染 (Jinja2)
from flask import render_template@app.route('/hello/<name>')
def hello(name):return render_template('hello.html', name=name)
<!-- templates/hello.html -->
<h1>Hello {{ name }}!</h1>
  • 自动转义:防 XSS 攻击
  • 继承机制
{% extends "base.html" %}
{% block content %}...{% endblock %}

3. 关键扩展

扩展名用途安装命令
Flask-SQLAlchemyORM 支持pip install flask-sqlalchemy
Flask-WTF表单处理pip install flask-wtf
Flask-Login用户认证pip install flask-login
Flask-RESTful构建 REST APIpip install flask-restful
数据库示例 (SQLAlchemy)
from flask_sqlalchemy import SQLAlchemyapp.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)@app.route('/add_user')
def add_user():user = User(username='admin')db.session.add(user)db.session.commit()return "User added!"

4. 项目结构(推荐)

myflaskapp/
├── app/
│   ├── templates/      # HTML 模板
│   ├── static/         # CSS/JS/图片
│   ├── __init__.py     # 工厂模式初始化
│   ├── models.py       # 数据模型
│   ├── routes.py       # 视图路由
│   └── forms.py        # 表单定义
├── config.py           # 配置文件
└── requirements.txt    # 依赖列表

5. Flask vs Django

特性FlaskDjango
定位微框架(灵活轻量)全栈框架(功能齐全)
学习曲线简单较陡峭
ORM需扩展(SQLAlchemy)自带(Django ORM)
Admin 后台需扩展(Flask-Admin)自带
适用场景API/微服务/快速原型企业级应用/内容管理系统
项目结构自由定义强制约定

6. 快速启动

# 安装
pip install flask# 最小应用 (app.py)
from flask import Flask
app = Flask(__name__)@app.route('/')
def home():return "Hello Flask!"if __name__ == '__main__':app.run(debug=True)# 运行
python app.py

访问 http://localhost:5000

7. 最佳实践

  1. 工厂模式:延迟创建应用实例
# app/__init__.py
def create_app(config):app = Flask(__name__)app.config.from_object(config)return app

蓝图(Blueprint):模块化路由

from flask import Blueprint
auth = Blueprint('auth', __name__)@auth.route('/login')
def login(): ...

环境配置

# config.py
class Config:SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard-to-guess'SQLALCHEMY_TRACK_MODIFICATIONS = False
  1. 生产部署
    • WSGI 服务器:Gunicorn + Nginx
    • 静态文件flask collectstatic

8. 常见扩展推荐

  • 数据库:Flask-SQLAlchemy, Flask-Migrate
  • 表单:Flask-WTF
  • 认证:Flask-Login, Flask-JWT
  • API:Flask-RESTful, Flask-APIs
  • 后台:Flask-Admin
  • 测试:pytest-flask

Flask 的哲学是 "微核+扩展",适合希望从底层构建应用的开发者。建议从官方快速入门(https://flask.palletsprojects.com/)开始实践!

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

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

相关文章

【LINUX网络】网络socet接口的基本使用以及实现简易UDP通信

根据本系列上两篇关于网络的初识介绍&#xff0c;现在我们开始实现一个UDP接口&#xff0c;以加强对该接口的理解。 1 . 服务器端 在本篇中&#xff0c;主要按照下面内容来实现&#xff1a; 创建并封装服务端&#xff1a;了解创建服务端的基本步骤 创建并封装客户端&#xff0…

MySQL的索引事务

索引 是什么 类似于目录&#xff0c;提高查询的速度&#xff0c;但是本身会占用空间&#xff0c;增删数据的时候也需要维护索引。所以查询操作频繁的时候可以创建索引。如果非条件查询列&#xff0c;或经常做插入、修改操作&#xff0c;或磁盘空间不足时&#xff0c;不考虑创…

安卓9.0系统修改定制化____第三方美化 bug修复 移植相关 辅助工具 常识篇 八

在修改rom中。有时候不可避免的需要对系统进行美化以及一些第三方系统的bug修复。在操作前需要了解系统的一些基本常识。例如同平台移植 跨平台移植以及内核移植 apk反编译等等相关的知识。今天解析的这款工具虽然不是直接面向安卓9.0.但对于了解以上的一些必备常识还是不错的 …

云服务器与物理服务器对比:选择最适合的业务服务器解决方案

更多云服务器知识&#xff0c;尽在hostol.com 在现代 IT 基础设施中&#xff0c;云服务器与物理服务器是两种常见的服务器解决方案。随着云计算技术的迅猛发展&#xff0c;越来越多的企业开始转向云服务器&#xff0c;但也有一些企业仍然坚持使用物理服务器&#xff0c;尤其是…

【redis使用场景——缓存——双写一致性】

redis使用场景——缓存——双写一致性 双写一致性问题的本质与场景典型不一致场景分析​​并发写操作导致的不一致​​​​读写交叉导致的不一致​​​​主从同步延迟导致的不一致​​ 解决延迟双删策略&#xff08;推荐&#xff09;优点​​&#xff1a;​​缺点​​&#xff…

【ArcGIS】在线影像底图调用

【ArcGIS】在线影像底图调用 一、 历史影像的调用二、ArcGIS online底图调用三、结语 一、 历史影像的调用 ESRI官方推出了World Imagery Wayback是一个提供全球范围内历史影像的在线服务。 官网地址&#xff1a;https://livingatlas.arcgis.com/wayback/ 操作步骤&#xff1…

密度估计:从零星足迹重建整体画像

想象你是一位侦探&#xff0c;案发现场只留下几个零散的脚印。**如何通过这些碎片&#xff0c;推断嫌疑人的身高体重&#xff1f;甚至预测他下一步的藏身之处&#xff1f;** 这种从局部反推整体的能力&#xff0c;正是**密度估计&#xff08;Density Estimation&#xff09;** …

B004基于STM32F401单片机简易交通灯实训数码管显示设计仿真资料

视频演示地址:https://www.bilibili.com/video/BV1GvNDzFEd9/ 运行环境 仿真软件:proteus8.17(切记别的版本不能运行) 编程软件:MDK525 STM32 cubmx版本:6.11.1(切记别的版本不能运行) 原理图画图软件:AD10 功能说明&#xff1a; 以STM32F401CB单片机为核心简易交通灯功能如下。…

没掌握的知识点记录

1、微内核的主要优点在于结构清晰、内核代码量少&#xff0c;安全性和可靠性高、可移植性强、可伸缩性、可扩展性高&#xff1b;其缺点是难以进行良好的整体优化、进程间互相通信的开销大、内核功能代码不能被直接调用而带来服务的效率低。 2、题目&#xff1a; 分页内存管理…

linux 远程终端执行qt应用显示到接入的物理显示器上

在显示器打开终端执行&#xff1a; xhost local: 在远程终端执行&#xff1a; export DISPLAY:0然后在终端执行qt应用就可以。 xhost local: 功能&#xff1a;允许本地用户&#xff08;local:&#xff09;访问 X 服务器&#xff08;X11 图形系统&#xff09;。 原理&#xf…

【AI驱动网络】

一、AI 驱动网络 1.1 什么是网络 1.1.1、网络的定义 ​网络是由若干节点​(如计算机、服务器、移动设备等)和连接这些节点的链路​(有线或无线传输介质)构成的系统,用于实现地理位置分散的独立设备之间的信息交换、资源共享与协同工作。在计算机领域,网络是信息传输、…

Python期末速成

一.基础内容 赋值语句&#xff1a; a 1 b "mayday" 标识符规则&#xff1a; 1.字母&#xff0c;数字&#xff0c;下划线&#xff0c;汉字组成。但数字不能开头 2.不能是保留字 3.特殊符号不行&#xff0c;*&#xffe5;^等 注释是在语句前面加&#xff03; …

【时时三省】(C语言基础)指针变量例子

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 存放地址的变量是指针变量&#xff0c;它用来指向另一个对象&#xff08;如变量、数组、函数等&#xff09;。 那么&#xff0c;怎样定义和使用指针变量呢? 先分析一个例子。 例题 通过…

MATLAB代码演示,TDOA定位的优化算法,提升Z轴的定位精度|复现《基于最小二乘法的室内三维定位算法研究》

本文复现文章: 王桂杰,焦良葆,曹雪虹.基于最小二乘法的室内三维定位算法研究[J].计算机技术与发展,2020,30(04):69-73.按照文章的核心算法,复现了TDOA下的最小二乘在三维环境中的改进定位方法,方法可以明显提升Z轴的定位精度 文章目录 概述运行结果展示matlab代码完整代码概…

React useState 原理

Fiber架构 React16 之后 提升显示性能 电脑屏幕参数刷新率 表示1s刷新次数 页面渲染 和 JS代码执行 共享一个线程 互斥 保持上一帧图像表现&#xff1a;卡顿 reconcilier改为 stack 和 fiber Fiber数据结构 执行单元 浏览器优先执行用户响应相关或者界面渲染相关事件&#…

【Datawhale组队学习202506】零基础学爬虫 01 初始爬虫

系列文章目录 01 初始爬虫 02 数据解析与提取 文章目录 系列文章目录前言1 爬虫和Python2 爬虫的矛盾2.1 爬虫与反爬2.2 robots核心字段重要规则说明非标准扩展指令协议生效条件局限性验证工具 2.3 一个爬虫demo 3 Web请求与HTTP协议3.1 一个web请求的全过程3.2 判断页面源代码…

前端面试十之vuex

Vuex 是一个专为 Vue.js 应用程序设计的状态管理模式和库&#xff0c;它集中管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。以下是关于 Vuex 的详细介绍&#xff1a; 1. 核心概念 State&#xff08;状态&#xff09; 它是 Vuex 中存…

Django中为api自定义一些装饰器:如参数校验等

在Django中使用了rest_framework时&#xff0c;一般我们会定义ModelSerializer来校验request.data中参数是否存在和参数类型。 但当我们只是想简单校验一些api的url上是否存在某些参数时&#xff0c;该怎么办&#xff1f;当然我们也可以通过定义Serializer来实现&#xff0c;但…

uni-app项目实战笔记21--uniapp缓存的写入和读取

一、缓存的写入 uni.setStorageSync("storageClassList",classifyList.value) 二、缓存的读取&#xff0c;如果缓存不存在&#xff0c;则返回空数组 const storageClassList uni.getStorageSync("storageClassList") || []; 三、对读取到的数据进行转…

Zama密码分析资助计划

1. 引言 2025年5月&#xff0c;Zama团队正式启动了 Zama 密码分析资助计划&#xff08;Cryptanalysis Grant Program&#xff09;&#xff0c;以支持那些致力于“破解”系统的研究人员&#xff1a; 无论是通过密码分析、侧信道攻击、故障注入&#xff0c;还是其他创新性方法。…