🗣 SL提问: 短网址生成源码
✍️ Ai批改: 短网址生成源码
以下是一个简单的短网址生成服务的实现代码,使用Python和Flask框架:
基础版本 (使用内存存储)
python
import hashlib
from flask import Flask, request, redirect
app = Flask(__name__)
存储短网址和原始网址的映射
url_mapping = {}
def generate_short_url(original_url):
使用MD5哈希生成短码
hash_object = hashlib.md5(original_url.encode())
hex_dig = hash_object.hexdigest()
取前8个字符作为短码
return hex_dig[:8]
@app.route('/shorten', methods=['POST'])
def shorten_url():
original_url = request.form.get('url')
if not original_url:
return URL不能为空, 400
生成短网址
short_code = generate_short_url(original_url)
url_mapping[short_code] = original_url
返回短网址 (这里假设服务运行在localhost:5000)
return fhttp://localhost:5000/{short_code}
@app.route('/<short_code')
def redirect_to_original(short_code):
original_url = url_mapping.get(short_code)
if original_url:
return redirect(original_url)
else:
return 短网址不存在, 404
if __name__ == '__main__':
app.run(debug=True)
进阶版本 (使用数据库存储)
python
import hashlib
import sqlite3
from flask import Flask, request, redirect
app = Flask(__name__)
初始化数据库
def init_db():
conn = sqlite3.connect('urls.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS urls
(short_code TEXT PRIMARY KEY, original_url TEXT)''')
conn.commit()
conn.close()
def generate_short_url(original_url):
使用MD5哈希生成短码
hash_object = hashlib.md5(original_url.encode())
hex_dig = hash_object.hexdigest()
取前8个字符作为短码
return hex_dig[:8]
@app.route('/shorten', methods=['POST'])
def shorten_url():
original_url = request.form.get('url')
if not original_url:
return URL不能为空, 400
生成短网址
short_code = generate_short_url(original_url)
存储到数据库
conn = sqlite3.connect('urls.db')
c = conn.cursor()
try:
c.execute(INSERT INTO urls VALUES (?, ?), (short_code, original_url))
conn.commit()
except sqlite3.IntegrityError:
如果短码已存在,直接使用
pass
conn.close()
返回短网址
return fhttp://localhost:5000/{short_code}
@app.route('/<short_code')
def redirect_to_original(short_code):
conn = sqlite3.connect('urls.db')
c = conn.cursor()
c.execute(SELECT original_url FROM urls WHERE short_code=?, (short_code,))
result = c.fetchone()
conn.close()
if result:
return redirect(result[0])
else:
return 短网址不存在, 404
if __name__ == '__main__':
init_db()
app.run(debug=True)
使用说明
1、基础版本使用内存存储映射关系,适合开发和测试
2、进阶版本使用SQLite数据库持久化存储
3、两种版本都提供了两个端点:
`/shorten` (POST): 接收原始URL,返回短网址
`/<short_code`: 访问短网址时重定向到原始URL
如何扩展
1、添加自定义短码功能
2、添加访问统计功能
3、添加过期时间功能
4、添加用户认证和私有短网址功能
5、使用更高效的哈希算法或自增ID生成短码
要运行此代码,需要安装Flask和SQLite:
pip install flask
注意:生产环境中应考虑使用更健壮的数据库如PostgreSQL或MySQL,并添加适当的错误处理和安全性措施。
0
IP地址: 248.219.100.97
搜索次数: 39
提问时间: 2025-07-12 11:05:33
❓️ 热门提问:
ai智能百事通
巨丰贵金属
黄金塘
iexs外汇平台下载
外汇期权市场
ai域名是那个国家
美因基因
东吴黄金金条
任天堂金币有什么用
外汇 短线
豌豆Ai站群搜索引擎系统
🤝 关于我们:
三乐Ai
作文批改
英语分析
在线翻译
拍照识图
Ai提问
英语培训
本站流量
联系我们
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.05.20》搭建本站。