Flask入门指南:从零构建Python微服务

1. Flask 是什么?

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

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

2. 核心组件

(1) 最小应用示例
python 复制代码
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) 路由与变量规则
python 复制代码
@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) 请求与响应
python 复制代码
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)
python 复制代码
from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)
html 复制代码
<!-- templates/hello.html -->
<h1>Hello {{ name }}!</h1>
  • 自动转义:防 XSS 攻击
  • 继承机制
html 复制代码
{% extends "base.html" %}
{% block content %}...{% endblock %}

3. 关键扩展

扩展名 用途 安装命令
Flask-SQLAlchemy ORM 支持 pip install flask-sqlalchemy
Flask-WTF 表单处理 pip install flask-wtf
Flask-Login 用户认证 pip install flask-login
Flask-RESTful 构建 REST API pip install flask-restful
数据库示例 (SQLAlchemy)
python 复制代码
from flask_sqlalchemy import SQLAlchemy

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)

@app.route('/add_user')
def add_user():
    user = User(username='admin')
    db.session.add(user)
    db.session.commit()
    return "User added!"

4. 项目结构(推荐)

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

5. Flask vs Django

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

6. 快速启动

python 复制代码
# 安装
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. 工厂模式:延迟创建应用实例
python 复制代码
# app/__init__.py
def create_app(config):
    app = Flask(__name__)
    app.config.from_object(config)
    return app

蓝图(Blueprint):模块化路由

python 复制代码
from flask import Blueprint
auth = Blueprint('auth', __name__)

@auth.route('/login')
def login(): ...

环境配置

python 复制代码
# 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/)开始实践!

相关推荐
心软且酷丶23 分钟前
leetcode:263. 丑数(python3解法,数学相关算法题)
python·算法·leetcode
点云SLAM2 小时前
Pytorch中gather()函数详解和实战示例
人工智能·pytorch·python·深度学习·机器学习·计算视觉·gather函数
无影无踪的青蛙2 小时前
[Python][Flask][Gunicorn] 搭建一个服务器-初步-小白式教程 - 1
python·flask·gunicorn
虾球xz2 小时前
CppCon 2016 学习:BUILDING A MODERN C++ FORGE FOR COMPUTE AND GRAPHICS
开发语言·c++·学习
future14122 小时前
C#核心学习
学习·c#
老歌老听老掉牙2 小时前
条件向量运算与三元表达式
python·向量·sympy·三元表达式·条件
乐言z2 小时前
SenseVoice部署,并调用api接口
python·语音识别·语音转文字
Sapphire~3 小时前
odoo-054 one2many 字段新增时检查上一行某个字段是否填写
python·odoo
不太可爱的叶某人3 小时前
【学习笔记】深入理解Java虚拟机学习笔记——第7章 虚拟机类加载机制
java·笔记·学习