初始化数据库
def init_db():
with sqlite3.connect(DB_NAME) as conn:
cursor = conn.cursor()
cursor.execute(CREATE TABLE IF NOT EXISTS links (short_code TEXT PRIMARY KEY, long_url TEXT))
短链接跳转
@app.route(/<short_code)
def redirect_to_long(short_code):
with sqlite3.connect(DB_NAME) as conn:
cursor = conn.cursor()
cursor.execute(SELECT long_url FROM links WHERE short_code=?, (short_code,))
result = cursor.fetchone()
if result:
return redirect(result[0], code=302)
return Not Found, 404
创建短链
@app.route(/shorten)
def shorten():
long_url = request.args.get(url)
if not long_url:
return Missing URL, 400
short_code = generate_short_code(long_url)
try:
with sqlite3.connect(DB_NAME) as conn:
cursor = conn.cursor()
cursor.execute(INSERT INTO links (short_code, long_url) VALUES (?, ?), (short_code, long_url))
except sqlite3.IntegrityError:
pass 短码冲突时可重新生成或直接返回已有结果
return fShort URL: http://localhost:5000/{short_code}
if __name__ == __main__:
init_db()
app.run(debug=True)