以下是一份针对新手的 Flask 开发入门文档,涵盖环境搭建、核心功能及常用模块实现,附带完整可运行代码:
Flask 新手入门开发文档
一、环境搭建
1. 安装 Python
- 下载地址:Python 官网(推荐 3.9+ 版本)
- 安装时勾选 “Add Python to PATH”
2. 创建虚拟环境
# 新建项目文件夹
mkdir flask_demo &&
cd flask_demo
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
3. 安装 Flask 及扩展
# 基础 Flask
pip install flask
# 常用扩展(后续功能会用到)
pip install flask-sqlalchemy # 数据库ORM
pip install flask-wtf # 表单处理
pip install flask-login # 用户认证
pip install requests # 网络请求(爬虫用)
pip install beautifulsoup4 # 网页解析(爬虫用)
二、Hello World 入门
1. 第一个 Flask 程序
创建 app.py
文件:
from flask import Flask
# 初始化 Flask 应用
app = Flask(__name__)
# 定义路由(访问 http://127.0.0.1:5000/ 时触发)
@app.route('/')
def index():
return "Hello, Flask!"
# 启动服务器
if __name__ == '__main__':
app.run(debug=True) # debug=True 表示开发模式,自动重启
2. 运行程序
python app.py
访问 http://127.0.0.1:5000
即可看到 “Hello, Flask!”
三、项目结构规范
推荐目录结构(后续功能基于此结构开发):
flask_demo/
├── app.py # 主程序入口
├── config.py # 配置文件
├── models.py # 数据模型(数据库表)
├── routes/ # 路由模块
│ ├── __init__.py
│ ├── auth.py # 登录注册路由
│ └── file.py # 文件上传下载路由
├── static/ # 静态文件(CSS/JS/图片)
│ └── style.css
├── templates/ # 模板文件(HTML)
│ ├── base.html # 基础模板(继承用)
│ ├── login.html # 登录页面
│ └── upload.html # 文件上传页面
└── uploads/ # 上传文件存储目录
四、核心功能实现
1. 页面解析(模板渲染)
Flask 使用 Jinja2 模板引擎,支持变量、循环、条件判断等。
(1)创建基础模板 templates/base.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Flask 示例{% endblock %}</title>
<link rel="stylesheet" href="{
{ url_for('static', filename='style.css') }}">
</head>
<body>
<nav>
<a href="/">首页</a>
<a href="/login">登录</a>
<a href="/upload">文件上传</a>
</nav>
<div class="content">
{% block content %}{% endblock %} <!-- 子模板内容会插入这里 -->
</div>
</body>
</html>
(2)创建子模板 templates/index.html
{% extends "base.html" %} <!-- 继承基础模板 -->
{% block title %}首页{% endblock %}
{% block content %}
<h1>欢迎来到首页</h1>
<p>当前时间:{
{ current_time }}</p> <!-- 接收变量 -->
<ul>
{% for item in items %} <!-- 循环示例 -->
<li>{
{ item }}</li>
{% endfor %}
</ul>
{% endblock %}
(3)渲染模板的路由(在 app.py
中添加)
from flask import render_template
from datetime import datetime
@app.route('/home')
def home():
# 传递变量到模板
data = {
'current_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'items': ['Flask', 'Python', 'Web开发']
}
return rend