Untitled
unknown
python
4 years ago
2.0 kB
11
Indexable
import os import sqlite3 from dotenv import load_dotenv from flask import Flask, render_template, request, flash, redirect, url_for from hashids import Hashids load_dotenv() def get_db_connection(): conn = sqlite3.connect('database.db') conn.row_factory = sqlite3.Row return conn app = Flask(__name__) app.config['SECRET_KEY'] = os.getenv("K") hashids = Hashids(min_length=5, salt=app.config['SECRET_KEY']) @app.route('/links') def links(): conn = get_db_connection() db_urls = conn.execute('SELECT id, created, original_url FROM urls').fetchall() conn.close() urls = [] for url in db_urls: url = dict(url) url['short_url'] = request.host_url + hashids.encode(url['id']) urls.append(url) return render_template('links.html', urls=urls) @app.route('/', methods=('GET', 'POST')) def index(): conn = get_db_connection() if request.method == 'POST': url = request.form['url'] if not url: flash('The URL is required!') return redirect(url_for('index')) url_data = conn.execute('INSERT INTO urls (original_url) VALUES (?)', (url,)) conn.commit() conn.close() url_id = url_data.lastrowid hashid = hashids.encode(url_id) short_url = request.host_url + hashid return render_template('index.html', short_url=short_url) return render_template('index.html') @app.route('/<id>') def url_redirect(id): conn = get_db_connection() original_id = hashids.decode(id) if original_id: original_id = original_id[0] url_data = conn.execute('SELECT original_url FROM urls' ' WHERE id = (?)', (original_id,) ).fetchone() original_url = url_data['original_url'] conn.commit() conn.close() return redirect(original_url) else: flash('Invalid URL') return redirect(url_for('index'))
Editor is loading...