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,并用待办清单应用串联实战。下一篇将介绍调试与性能优化,为系列收官,敬请期待!

相关推荐
神仙别闹1 小时前
基于C++ MFC实现动态分区分配存储管理
开发语言·c++·mfc
for_ever_love__1 小时前
python基础语法学习: 类型注解
开发语言·python·学习
caimouse1 小时前
ReactOS 图形系统分析(46):DC 工具 — dcutil.c
c语言·开发语言
王志来137944730082 小时前
聚焦五大核心场景:工控服务器机箱平台的垂直深耕之路
运维·服务器·python
xixiaoyunya2 小时前
从零搭建跨域互联网络:个人与小团队的轻量组网方案技术解析
开发语言·智能路由器·php
资源大佬星 课it2 小时前
黑马 Java+AI新版V16零基础就业班视频课程百度网盘下载
java·开发语言·人工智能
zmzb01032 小时前
Python课后习题训练记录Day193
开发语言·python
卷无止境2 小时前
LiteLLM 全面解析开源AI网关如何统一管理百余种大模型
后端·python
郝学胜-神的一滴2 小时前
[简化版 GAMES 104] 现代游戏引擎 06:从Tick时序到邮局模型,拆解确定性世界的底层密码
开发语言·c++·游戏引擎·图形渲染·软件开发·opengl