基于 Python Flask 的 Web3 应用开发
·
很高兴为你介绍 Web3,并为你提供一个基于 Python Flask 的 Web3 应用开发指南。
🚀 第一部分:Web3 是什么?为什么说是今后 10 年的主流?
Web3(Web 3.0) 是互联网的下一个阶段,其核心理念是 “去中心化” 和 “用户拥有数据”。
为了让你通俗易懂地理解,我们可以用一个**“租房 vs. 买房”**的比喻来对比:
📊 1. 互联网的三个时代对比
| 维度 | Web 1.0 (只读) | Web 2.0 (交互) | Web 3.0 (拥有) |
|---|---|---|---|
| 比喻 | 看橱窗 | 租房子 | 买房子 |
| 典型应用 | 新浪、搜狐 | 微信、抖音、淘宝 | DeFi、NFT、DAO |
| 数据归属 | 网站所有 | 平台巨头所有 | 用户个人所有 |
| 用户角色 | 读者 | 产消者 | 所有者、治理者 |
| 核心特征 | 只读 | 读写 | 读写拥有 |
🏠 2. 通俗解释
- Web 2.0 (现状): 你就像一个租客。你在抖音上创作视频,粉丝是你的,但账号是抖音的。如果抖音封了你的号,你什么都带不走。你的数据和影响力都被“房东”(平台)掌握。
- Web 3.0 (未来): 你就像一个房主。你拥有自己的数字身份(钱包地址),你的资产(NFT、代币)存在你的钱包里。你可以带着你的资产在不同的应用间自由穿梭。平台只是为你提供服务的“物业”,而不是“地主”。
🚀 3. 为什么它是未来 10 年的主流?
- 数据确权: 你终于拥有了自己的数据。你的浏览记录、社交关系不再被大公司免费拿去卖广告。
- 价值互联网: 以前互联网只能传递信息,现在能直接传递价值(加密货币)。你可以直接给大洋彼岸的陌生人转账,不需要银行中介。
- 创作者经济: 艺术家、音乐人可以通过 NFT 直接卖给粉丝,不用被中间商抽成。
- DAO (去中心化自治组织): 未来的公司可能没有 CEO,大家通过代码和投票来共同管理资金和决策。
💻 第二部分:基于 Python Flask 的 Web3 应用开发
Python 本身并不是区块链的原生语言(以太坊是 Go,Solidity 是智能合约语言),但 Python 拥有强大的库 web3.py,非常适合用来开发后端服务、数据分析或构建 DApp(去中心化应用)的后端。
下面我将带你开发一个简单的 Flask 应用,用于查询以太坊钱包的余额。
🛠️ 准备工作
-
安装依赖:
你需要安装flask和web3库。pip install flask web3 python-dotenv -
获取节点访问权限:
你需要一个以太坊节点来连接区块链。你可以自己搭建节点(很慢),或者使用第三方服务(如 Infura 或 Alchemy)。注册后,你会得到一个 HTTP API URL。
📁 项目结构
flask-web3-demo/
├── app.py
├── templates/
│ └── index.html
├── .env
└── requirements.txt
🧩 1. 配置文件 (.env)
创建一个 .env 文件来存放你的节点 URL:
INFURA_URL=https://mainnet.infura.io/v3/你的-infura-project-id
🐍 2. 后端代码 (app.py)
from flask import Flask, render_template, request, jsonify
from web3 import Web3
import os
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
app = Flask(__name__)
# 1. 连接 Web3 节点
infura_url = os.getenv('INFURA_URL')
w3 = Web3(Web3.HTTPProvider(infura_url))
# 检查连接
if w3.is_connected():
print(" 成功连接到以太坊节点")
else:
print(" 连接失败")
@app.route('/')
def index():
return render_template('index.html')
@app.route('/get_balance', methods=['POST'])
def get_balance():
data = request.get_json()
address = data.get('address')
try:
# 校验地址格式
if not w3.is_address(address):
return jsonify({"error": "无效的以太坊地址"}), 400
# 获取余额 (单位是 Wei)
balance_wei = w3.eth.get_balance(address)
# 转换为 ETH (1 ETH = 10^18 Wei)
balance_eth = w3.from_wei(balance_wei, 'ether')
return jsonify({
"address": address,
"balance": str(balance_eth)
})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(debug=True)
🌐 3. 前端页面 (templates/index.html)
<!DOCTYPE html>
<html>
<head>
<title>Flask Web3 余额查询</title>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
<h1>🔍 Web3 钱包余额查询器</h1>
<p>输入一个以太坊地址,查询其 ETH 余额。</p>
<input type="text" id="addressInput" placeholder="例如: 0x..." style="width: 300px; padding: 5px;">
<button onclick="queryBalance()">查询余额</button>
<div id="result" style="margin-top: 20px; font-weight: bold;"></div>
<script>
async function queryBalance() {
const address = document.getElementById('addressInput').value;
const resultDiv = document.getElementById('result');
resultDiv.innerHTML = "查询中...";
try {
const response = await axios.post('/get_balance', {
address: address
});
if (response.data.error) {
resultDiv.innerHTML = `错误: ${response.data.error}`;
} else {
resultDiv.innerHTML =
`地址: ${response.data.address} <br>
余额: <span style="color: green">${response.data.balance} ETH</span>`;
}
} catch (error) {
resultDiv.innerHTML = `请求失败: ${error.response?.data?.error || error.message}`;
}
}
</script>
</body>
</html>
▶️ 4. 运行应用
-
确保你的
.env文件配置正确。 -
运行 Python 脚本:
python app.py -
打开浏览器访问
http://127.0.0.1:5000。 -
输入一个以太坊地址(例如:
0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B),点击查询,你就能看到该地址的 ETH 余额了。
📝 总结
这个例子展示了如何使用 Flask 作为后端服务器,利用 web3.py 库与以太坊区块链进行交互。
在这个简单的应用中:
- Flask 处理网页请求和用户界面。
- web3.py 负责连接区块链节点、获取数据。
- 前端 (HTML/JS) 负责展示数据。
这只是一个入门示例。在实际的 Web3 开发中,你可能还需要学习如何:
- 使用
eth-account库进行本地签名。 - 与智能合约交互(读取数据、发送交易)。
- 处理代币转账逻辑。
希望这个解释和示例对你有帮助!
更多推荐


所有评论(0)