短链接生成核心逻辑是将长URL映射为短码并反查,推荐用MD5哈希+base64.urlsafe_b64encode截取前6位生成短码,保证相同URL产出相同短链;Flask需设计/shorten(POST)和/(GET重定向)两个路由,严格校验短码长度与字符范围,避免安全风险。

短链接生成的核心逻辑怎么写
核心就两件事:把长 URL 映射成短字符串,再把短字符串反查回原 URL。不依赖数据库也能起步,用 Python 字典 + 内存存储就能跑通流程,适合本地验证或轻量部署。
关键不是“怎么存”,而是“怎么生成短码”——不能用递增 ID(暴露总量)、不能纯随机(碰撞概率高)、最好可逆或可控长度。推荐用 base64.urlsafe_b64encode 对哈希值做编码,再截取前 6 位:
hashlib.md5
- 生成短链:
curl -X POST http://localhost:5000/shorten -H "Content-Type: application/json" -d '{"url":"https://example.com/very/long/path?x=1&y=2"}' - 拿到返回的
short_url后,用浏览器或curl -I看重定向头:curl -I http://localhost:5000/abc123应返回HTTP/1.0 302 FOUND和Location: https://example.com/...
常见失败点:json 请求没带 Content-Type: application/json 头 → Flask 的 request.json 为 None;短码含非法字符(如 +、/)→ urlsafe_b64encode 已规避,但手动拼接时容易出错。
上线前必须改掉的三个硬编码
本地跑通不等于能上线。以下三处不改,服务一部署就失效:
-
https://www.php.cn/link/a68f59fe7b60bcaad0ddeb230f5ecdfa}→ 必须换成你的真实域名,比如https://lnk.example.com/{code},否则返回的短链接点不开 -
url_map = {}→ 进程重启即丢失全部映射,换成 Redis 或 SQLite。哪怕只用shelve也比纯内存强:import shelve; db = shelve.open('urls.db') -
hashlib.md5(long_url.encode())→ 如果长 URL 带用户参数(如 token),不同用户生成的短链会撞。需考虑是否加 salt 或改用用户 ID + URL 拼接哈希
最常被忽略的是协议和域名——开发时习惯写 localhost,但生成的短链接一旦分发出去,就永远绑定那个地址,后期迁移成本极高。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











