Introduction

URL shortening services are widely used to create shorter versions of long URLs, making them easier to share and manage. In this guide, we'll explore how to implement a URL shortening service with Flask, allowing users to convert long URLs into shorter, more manageable links. By following this guide, you'll have a foundation for creating your own URL shortening service using Flask.


Step 1: Setting Up Your Flask Application

Start by setting up your Flask application and installing the necessary extensions. Here's a sample directory structure:

url-shortener-app/
app.py
templates/
index.html

Step 2: Creating a URL Model

Create a model to store URL entries in a database. Here's an example of how to define a URL model using Flask-SQLAlchemy:

# app.py
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
import random
import string
app = Flask(__name)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///urls.db'
db = SQLAlchemy(app)
class URL(db.Model):
id = db.Column(db.Integer, primary_key=True)
original_url = db.Column(db.String(200), nullable=False)
short_url = db.Column(db.String(10), unique=True, nullable=False)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)

Step 3: Creating URL Shortening Templates

Create an HTML template for the URL shortening page. Here's a basic structure for your template (index.html):

<!DOCTYPE html>
<html>
<head>
<title>URL Shortener</title>
</head>
<body>
<header>
<h1>URL Shortener</h1>
</header>
<section>
<h2>Shorten a URL</h2>
<form method="post" action="/shorten_url">
<label for="original_url">Original URL:</label>
<input type="url" id="original_url" name="original_url" required>
<button type="submit">Shorten</button>
</form>
<p>Shortened URL: <a href="{{ shortened_url }}">{{ shortened_url }}</a></p>
</section>
</body>
</html>

Step 4: Routing for URL Shortening

Create routes for shortening and redirecting URLs. Here's an example of how to define these routes:

# app.py
@app.route('/shorten_url', methods=['POST'])
def shorten_url():
original_url = request.form['original_url']
short_url = generate_short_url() url_entry = URL(original_url=original_url, short_url=short_url)
db.session.add(url_entry)
db.session.commit() return render_template('index.html', shortened_url=request.url_root + short_url)
def generate_short_url():
characters = string.ascii_letters + string.digits
short_url = ''.join(random.choice(characters) for _ in range(6))
return short_url
@app.route('/<short_url>')
def redirect_to_original(short_url):
url_entry = URL.query.filter_by(short_url=short_url).first()
if url_entry:
return redirect(url_entry.original_url)
else:
return 'URL not found.'
if __name__ == '__main__':
app.run(debug=True)

Step 5: Running Your URL Shortener

Run your Flask URL shortener application using the following command:

python app.py

Access your web application in a browser, and you'll be able to shorten and access URLs.


Conclusion

Implementing a URL shortener in Flask is a useful and educational project. By following the steps in this guide, you can set up your Flask application, create a template for shortening URLs, and enable users to generate shortened links. Enhance your URL shortener by adding features like statistics tracking and URL expiration.