> 技术文档 > Flask 入门:用 Python 快速搭建你的第一个 Web 应用_python flask 网站开发例子

Flask 入门:用 Python 快速搭建你的第一个 Web 应用_python flask 网站开发例子


Flask 框架详解

概述

Flask 是一个轻量级的 Python Web 应用程序框架,由奥地利开发者 Armin Ronacher 在 2010 年创建。最初它作为 April Fool\'s joke(愚人节玩笑)的一部分发布,名为\"Denied\",后来迅速发展成为一个成熟且广受欢迎的 Web 框架。

核心组件

Flask 建立在两个强大的 Python 库之上:

1. Werkzeug

  • 一个完整的 WSGI(Web Server Gateway Interface)工具包
  • 负责处理 HTTP 请求和响应
  • 提供 URL 路由、请求和响应对象、cookie 管理等基础功能
  • 支持会话管理、文件上传、安全头设置等 Web 开发必需功能

2. Jinja2

  • 一个现代且设计友好的模板引擎
  • 用于生成动态 HTML 内容
  • 支持模板继承、自动 HTML 转义(防止 XSS 攻击)
  • 提供丰富的过滤器、测试和全局变量等功能

微框架特性

Flask 被称为\"微框架\"(microframework),因为:

  • 核心代码非常精简(仅有约30个源文件)
  • 不包含ORM(对象关系映射)或表单验证等\"全栈\"功能
  • 遵循\"约定优于配置\"原则,减少不必要的复杂性
  • 保持核心简单但可扩展性强

扩展生态系统

虽然 Flask 核心简单,但通过丰富的扩展库可以轻松添加各种功能:

常用扩展示例

  1. Flask-SQLAlchemy: 提供 ORM 功能,支持多种数据库
  2. Flask-Login: 处理用户认证和会话管理
  3. Flask-WTF: 表单验证和 CSRF 保护
  4. Flask-Mail: 电子邮件发送支持
  5. Flask-RESTful: 构建 REST API 的工具
  6. Flask-Caching: 提供缓存功能

适用场景

Flask 的轻量级特性使其适用于:

  • 初学者学习 Web 开发
  • 快速原型开发
  • 小型到中型 Web 应用
  • 微服务架构中的单个服务
  • 作为 API 后端服务
  • 教学和演示项目

同时,通过合理使用扩展,Flask 也能满足企业级应用的需求,许多知名公司如 LinkedIn、Pinterest 和 Netflix 都在生产环境中使用 Flask。

环境准备

1. 安装 Python

Flask 需要 Python 3.6 或更高版本。推荐使用 Python 3.8+ 以获得最佳兼容性。可以通过以下命令检查 Python 版本:

python --version# 或python3 --version

如果尚未安装 Python,可以从 python.org 下载最新版本。

2. 创建虚拟环境(强烈推荐)

虚拟环境可以隔离项目依赖,避免包冲突。创建和激活虚拟环境的步骤如下:

Linux/macOS:

python -m venv venvsource venv/bin/activate # 激活虚拟环境

Windows:

python -m venv venvvenv\\Scripts\\activate # 激活虚拟环境

激活后,终端提示符通常会显示虚拟环境名称,如 (venv)

3. 安装 Flask

在激活的虚拟环境中运行:

pip install flask

安装完成后可以验证版本:

python -c \"import flask; print(flask.__version__)\"

创建第一个 Flask 应用

基础应用结构

创建一个新文件 app.py,添加以下代码:

from flask import Flask# 创建 Flask 应用实例# __name__ 让 Flask 知道在哪里查找模板和静态文件app = Flask(__name__)# 使用 route 装饰器定义URL路由@app.route(\'/\')def hello_world(): # 这个函数会在访问根URL时被调用 return \'Hello, World!\'# 确保这个脚本只在直接运行时执行,而不是被导入时if __name__ == \'__main__\': # 启动开发服务器 # debug=True 开启调试模式,会自动重载代码更改 app.run(debug=True)

代码解析

  1. Flask(__name__):创建应用实例,__name__ 参数帮助 Flask 确定应用根目录
  2. @app.route(\'/\'):路由装饰器,将 URL 路径映射到视图函数
  3. hello_world():视图函数,返回响应内容
  4. app.run():启动内置开发服务器

运行应用

在终端执行:

python app.py

典型输出:

* Serving Flask app \'app\'* Debug mode: on* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)* Restarting with stat* Debugger is active!* Debugger PIN: 123-456-789

打开浏览器访问 http://localhost:5000http://127.0.0.1:5000,你将看到 \"Hello, World!\" 的页面。

添加更多功能

1. 动态路由示例

@app.route(\'/user/\')def show_user_profile(username): # 在URL中捕获变量  return f\'User {username}\'@app.route(\'/post/\')def show_post(post_id): # 可以指定变量类型 (int, float, path等) return f\'Post {post_id}\'

访问示例:

  • /user/john → 显示 \"User john\"
  • /post/123 → 显示 \"Post 123\"

2. 模板渲染进阶

创建 templates/index.html

 {<!-- -->{ title }}  .welcome { color: blue; font-size: 24px; }  
Hello, {{ name }}!

Current time: {{ current_time }}

修改视图函数:

from flask import render_templatefrom datetime import datetime@app.route(\'/hello/\')def hello(name): return render_template( \'index.html\', title=\'Welcome Page\', name=name.capitalize(), current_time=datetime.now().strftime(\'%Y-%m-%d %H:%M:%S\') )

3. 表单处理进阶

from flask import request, redirect, url_for@app.route(\'/login\', methods=[\'GET\', \'POST\'])def login(): if request.method == \'POST\': username = request.form.get(\'username\', \'guest\') remember = \'remember\' in request.form # 复选框处理 return redirect(url_for(\'hello\', name=username)) return \'\'\'  

Username:

Password:

Remember me

\'\'\'

项目结构建议

随着应用规模增长,推荐采用模块化结构:

/myflaskapp│├── /application  # 主应用包│ ├── __init__.py  # 应用工厂│ ├── routes.py # 路由定义│ ├── /static│ │ ├── /css  # CSS文件│ │ ├── /js  # JavaScript文件│ │ └── /images  # 图片资源│ └── /templates # 模板文件│ ├── base.html # 基础模板│ ├── index.html # 首页模板│ └── /auth # 认证相关模板│  └── login.html│├── config.py  # 配置文件├── requirements.txt # 依赖列表└── wsgi.py  # WSGI入口点

部署选项详解

1. 传统服务器部署

使用 Nginx + Gunicorn 的典型部署流程:

pip install gunicorngunicorn -w 4 -b 127.0.0.1:8000 wsgi:app

然后在 Nginx 配置中添加反向代理:

server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}

2. 云平台部署示例(Heroku)

  1. 创建 Procfile
web: gunicorn wsgi:app
  1. 创建 runtime.txt 指定 Python 版本:
python-3.9.7
  1. 部署命令:
heroku loginheroku creategit push heroku main

高尔夫球论坛