Flask · 入门 2026.08.29

安装 Flask

Ctrl + ` 打开终端,确保 (.venv) 标识:

pip install flask

主程序 app.py

根目录新建 app.py

from flask import Flask app = Flask(__name__) # __name__ 当前模块 @app.route('/') def hello(): return 'Hello, World!' if __name__ == '__main__': app.run(debug=True)
知识点: if __name__ == '__main__' 确保直接运行启动,被导入不执行。

路由与参数

基础路由

装饰器 @app.route 绑定 URL:

路径参数

@app.route('/user/<username>') def show_user_profile(username): return f'User {username}'

指定 HTTP 方法

@app.route('/login', methods=['GET', 'POST']) def login(): # 处理登录逻辑 pass 测试: import requests res=requests.get("http://127.0.0.1:5000/login") res1=requests.post("http://127.0.0.1:5000/login") print(res.text) print(res1.text)

获取请求参数

使用 from flask import request 全局对象:

URL 查询
/user?parama=aa
request.args.get("parama")
表单参数
request.form.get("username")
JSON 数据
json.loads(request.data)
Cookie
request.cookies
请求头: request.headers

模板开发

为什么不用 Python 拼接 HTML?

渲染模板

from flask import render_template @app.route('/show_html') def show_html(): datas = [(1, "name1"), (2, "name2")] return render_template("template.html", datas=datas)

模板语法

<!-- 输出变量 --> {{ data }} , {{ data[0] }} , {{ data["id"] }} <!-- for 循环 --> {% for item in navigation %} <li>{{ item.caption }}</li> {% endfor %} <!-- if 判断 --> {% if name %} <h1>Hello {{ name }}!</h1> {% else %} <h1>Hello, World!</h1> {% endif %}

返回 JSON 数据

  1. 读取文件 / 数据库 / 远程接口
  2. 通过 json.dumps() 输出 JSON 字符串
import json @app.route('/api/data') def api_data(): data = {"name": "Flask", "version": "2.3"} return json.dumps(data)
Tip: Flask 也提供 jsonify() 更方便返回 JSON 响应。

综合示例

from flask import Flask, render_template, request, jsonify app = Flask(__name__) @app.route('/') def index(): return 'Hello, Flask!' @app.route('/user/<name>') def user(name): return f'User: {name}' @app.route('/form', methods=['GET', 'POST']) def form_demo(): if request.method == 'POST': username = request.form.get('username') return f'Hello, {username}' return render_template('form.html') @app.route('/api') def api(): return jsonify({"status": "ok", "data": [1,2,3]}) if __name__ == '__main__': app.run(debug=True)