Python进阶教程:Web开发入门(Flask)

目录

Python进阶教程:Web开发入门(Flask)

本文是 Python 入门教程系列 的第 9 篇。前面介绍了数据分析,本篇介绍用 Flask 框架快速搭建 Web 应用。

一、Flask 简介

Flask 是 Python 最流行的轻量级 Web 框架:

  • 简单:一个文件即可启动 Web 服务
  • 灵活:可以自由选择组件
  • 生态好:文档丰富,社区庞大

安装:pip install flask

二、第一个 Flask 应用

python 复制代码
from flask import Flask

app = Flask(__name__)

@app.route("/")
def home():
    return "<h1>Hello, Flask!</h1>"

if __name__ == "__main__":
    app.run(debug=True)  # 启动,访问 http://127.0.0.1:5000

三、路由与参数

python 复制代码
from flask import Flask

app = Flask(__name__)

# 普通路由
@app.route("/about")
def about():
    return "关于页面"

# 动态参数
@app.route("/user/<name>")
def user(name):
    return f"<h1>欢迎,{name}!</h1>"

# 指定请求方法
@app.route("/login", methods=["GET", "POST"])
def login():
    return "登录页面"

if __name__ == "__main__":
    app.run(debug=True)

四、模板渲染

模板让你在 HTML 中嵌入 Python 变量和逻辑(Jinja2 模板引擎):

python 复制代码
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def home():
    return render_template("index.html", title="首页", items=["Python", "Flask", "Web"])

if __name__ == "__main__":
    app.run(debug=True)

配套模板文件 templates/index.html:

html 复制代码
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title></head>
<body>
    <h1>{{ title }}</h1>
    <ul>
        {% for item in items %}
        <li>{{ item }}</li>
        {% endfor %}
    </ul>
</body>
</html>

五、处理表单数据

python 复制代码
from flask import Flask, request

app = Flask(__name__)

@app.route("/submit", methods=["POST"])
def submit():
    name = request.form.get("name")
    email = request.form.get("email")
    return f"收到:{name}({email})"

if __name__ == "__main__":
    app.run(debug=True)

六、JSON API

现代 Web 应用前后端分离,后端只需返回 JSON:

python 复制代码
from flask import Flask, jsonify, request

app = Flask(__name__)

users = [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]

@app.route("/api/users", methods=["GET"])
def get_users():
    return jsonify(users)

@app.route("/api/users", methods=["POST"])
def add_user():
    data = request.get_json()
    new_id = max(u["id"] for u in users) + 1
    users.append({"id": new_id, "name": data.get("name")})
    return jsonify(users[-1]), 201

if __name__ == "__main__":
    app.run(debug=True)

七、实战:待办清单 Web 应用

综合运用所学知识,做一个简单的待办清单应用:

python 复制代码
from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)
todos = []  # 内存存储,重启会清空

@app.route("/")
def index():
    return render_template("todos.html", todos=todos)

@app.route("/add", methods=["POST"])
def add():
    text = request.form.get("text", "").strip()
    if text:
        todos.append({"id": len(todos) + 1, "text": text, "done": False})
    return redirect(url_for("index"))

@app.route("/done/<int:todo_id>")
def done(todo_id):
    for t in todos:
        if t["id"] == todo_id:
            t["done"] = True
    return redirect(url_for("index"))

if __name__ == "__main__":
    app.run(debug=True)
html 复制代码
<!-- templates/todos.html -->
<!DOCTYPE html>
<html>
<body>
    <h1>待办清单</h1>
    <form method="post" action="/add">
        <input type="text" name="text" placeholder="输入待办事项">
        <button type="submit">添加</button>
    </form>
    <ul>
        {% for t in todos %}
        <li>{{ "✅" if t.done else "⬜" }} {{ t.text }}
            {% if not t.done %}<a href="/done/{{ t.id }}">完成</a>{% endif %}
        </li>
        {% endfor %}
    </ul>
</body>
</html>

总结

本篇介绍了 Flask 的路由、模板、表单处理和 JSON API,并用待办清单应用串联实战。下一篇将介绍调试与性能优化,为系列收官,敬请期待!

相关推荐
卷无止境30 分钟前
mathmodel-figure-templates 以及两个上手案例
后端·python
fengci.39 分钟前
CTF2MISC中等部分
开发语言·前端·学习
锋行天下1 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
一条大祥脚1 小时前
深入理解 PyTorch FlexAttention:从 Score Mod 到 Mask Mod 的稀疏加速之道
人工智能·pytorch·python·注意力机制·flex attention·可编程注意力
xys_6782 小时前
JavaEE通关手册:初识Java
java·开发语言
2601_967980112 小时前
Python自动化办公:模块、库与样式调整教程
python·excel·自动化办公·openpyxl·样式调整
长沙三为智能科技3 小时前
GEO与传统SEO的5个关键差异:排名与被引用、关键词与答案型的全维度对比
python·aigc·seo·ai搜索·geo优化
ShineWinsu3 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
量化分析码农4 小时前
【Python量化趋势跟踪实战 02】突破买入总被假突破坑:通道系统与入场时机
python
Agent世界4 小时前
多平台登录态巡检:cookie 判据为什么会撒谎
python