初始化数据库
def init_db():
with sqlite3.connect(DB_NAME) as conn:
conn.execute(CREATE TABLE IF NOT EXISTS urls (id INTEGER PRIMARY KEY AUTOINCREMENT, original TEXT UNIQUE, short TEXT))
生成短码
def generate_short(original_url):
with sqlite3.connect(DB_NAME) as conn:
cur = conn.cursor()
cur.execute(INSERT OR IGNORE INTO urls (original) VALUES (?), (original_url,))
conn.commit()
cur.execute(SELECT id FROM urls WHERE original=?, (original_url,))
row = cur.fetchone()
if row:
short_code = base62.encode(row[0])
conn.execute(UPDATE urls SET short=? WHERE original=?, (short_code, original_url))
return short_code
return None
短码解析
@app.route(/<short_code)
def redirect_to_url(short_code):
with sqlite3.connect(DB_NAME) as conn:
cur = conn.cursor()
cur.execute(SELECT original FROM urls WHERE short=?, (short_code,))
row = cur.fetchone()
if row:
return redirect(row[0], code=302)
return Not found, 404
创建短链接
@app.route(/shorten)
def shorten():
original_url = request.args.get(url)
if not original_url:
return Missing URL, 400
short_code = generate_short(original_url)
if short_code:
return fShortened URL: http://localhost:5000/{short_code}
else:
return Failed to shorten URL, 500
if __name__ == __main__:
init_db()
app.run(debug=True)