Flask · 入门
安装 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:
- / → 首页
- /hello → 问候
- /user → 用户
路径参数
@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 数据
- 读取文件 / 数据库 / 远程接口
- 通过 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)