想给小程序搭个后端,一听要写接口就头皮发麻。我之前也是这么想的,直到我用了一个叫 FastAPI 的 Python 框架。这东西写起来就像填表格,配个小程序官方文档,三天真能跑通全链路。
先说说准备工作。你得有个 Python 环境,版本别太旧,3.8 以上就行。用 pip install fastapi uvicorn 装两个包,一个是框架本身,一个是启动服务器用的工具。再装个 pip install requests,后面调试会用得上。
写第一个接口。打开记事本,新建一个 main.py 文件。里面写三行代码:
from fastapi import FastAPI
app = FastAPI()
@app.get('/hello')
def read_root():
return {'message': 'Hello World'}
保存文件。打开终端,输入 uvicorn main:app --reload,回车。看到一串提示说“Application startup complete”就对了。浏览器访问 http://127.0.0.1:8000/hello,页面显示 {'message':'Hello World'}。第一个接口成了。
小程序要请求后端数据,最常见的是用户登录。微信官方文档里有个 wx.login 接口,拿到 code 后发给你的后端。后端用 code 去微信服务器换 openid 和 session_key。这步是串起来的核心。
在 FastAPI 里加个登录接口:
@app.post('/login')
def login(code: str):
url = f'https://api.weixin.qq.com/sns/jscode2session?appid=YOUR_APPID&secret=YOUR_SECRET&js_code={code}&grant_type=authorization_code'
resp = requests.get(url)
data = resp.json()
return {'openid': data['openid']}
注意替换 YOUR_APPID 和 YOUR_SECRET。这两个值从小程序后台的管理 - 开发设置里找,别填错。返回的 openid 就是用户的唯一标识,存数据库里当用户ID用。
数据存储这块,新手别搞太复杂。用 SQLite 就行,Python 自带的库,不需要额外安装数据库。写个数据库操作文件 db.py:
import sqlite3
conn = sqlite3.connect('app.db')
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, name TEXT)')
conn.commit()
在登录接口里把用户存进去:
c.execute('INSERT OR IGNORE INTO users (id) VALUES (?)', (data['openid'],))
conn.commit()
小程序端怎么调?在开发工具里,wx.request 的 url 写成 http://你的电脑IP:8000/login(不要用 localhost,手机上访问不了)。method 用 POST,data 传 {code: res.code}。如果报错说不在同一个网段,把电脑防火墙关了或者设置入站规则。
三天规划:第一天搭环境写登录接口。第二天加数据读写,做个列表展示功能。第三天调通小程序端联调,处理跨域问题。跨域在 FastAPI 里加个中间件就解决:
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(CORSMiddleware, allow_origins=[''], allow_methods=[''], allow_headers=[''])
遇到报错先看终端打印的日志。常见的错误 code 是 -1 表示后端没跑起来,检查端口是否被占用。400 错误是参数名写错,小程序传的字段名和后端接收的名字要一致。
所有接口写完记得用 Postman 测试一遍。模拟小程序发请求,确认返回格式。万一小程序那边踩坑,至少能确定是前端问题还是后端问题。后端是整个链条的根基,稳了就是稳了。
文档里提到的代码片段足够跑通登录、查询、更新三个基础场景。想加新功能就照着这个模式写,get 查询数据,post 新增或修改。三天后小程序能展示来自后端的数据,那种感觉特别踏实。