DEV Community

Cover image for How to Create a Simple URL Shortener Tool with Python
ZeroByteCode
ZeroByteCode

Posted on

3 1

How to Create a Simple URL Shortener Tool with Python

A URL shortener tool allows users to take a long URL and convert it into a shorter, more manageable link. We can build a simple version of this tool using Python and Flask, a lightweight web framework.

Prerequisites

Before starting, ensure you have the following:

  • Python installed on your system (Python 3.6+ is recommended).
  • Flask installed. You can install Flask using pip.

Step 1: Setting Up Your Environment

First, you need to create a virtual environment and install Flask. Open your terminal and run the following commands:

# Create a virtual environment
python -m venv myenv

# Activate the virtual environment
# On Windows
myenv\Scripts\activate
# On macOS/Linux
source myenv/bin/activate

# Install Flask
pip install Flask
Enter fullscreen mode Exit fullscreen mode

Step 2: Writing the Code

Create a directory for your project, e.g., url_shortener, and inside it, create a Python file called app.py. We'll break down the code into sections.

Importing Required Libraries

from flask import Flask, request, redirect, url_for
import string
import random
Enter fullscreen mode Exit fullscreen mode

Setting Up Flask App and Database

We'll use a simple in-memory dictionary to store the URL mappings. For a more robust solution, you might use a database like SQLite or PostgreSQL.

app = Flask(__name__)
url_mapping = {}
Enter fullscreen mode Exit fullscreen mode

Function to Generate Short URLs

We'll create a function that generates a short URL key.

def generate_short_url():
    characters = string.ascii_letters + string.digits
    short_url = ''.join(random.choice(characters) for _ in range(6))
    return short_url
Enter fullscreen mode Exit fullscreen mode

Route to Handle URL Shortening

This route will take a long URL from the user and return a shortened version.

@app.route('/shorten', methods=['POST'])
def shorten_url():
    original_url = request.form['url']
    short_url = generate_short_url()
    url_mapping[short_url] = original_url
    return f'Shortened URL: {request.host_url}{short_url}'
Enter fullscreen mode Exit fullscreen mode

Route to Redirect Short URLs

This route will redirect users from the short URL to the original long URL.

@app.route('/<short_url>')
def redirect_url(short_url):
    original_url = url_mapping.get(short_url)
    if original_url:
        return redirect(original_url)
    else:
        return 'URL not found', 404
Enter fullscreen mode Exit fullscreen mode

Main Function to Run the App

if __name__ == "__main__":
    app.run(debug=True)
Enter fullscreen mode Exit fullscreen mode

Step 3: Running the Tool

Save your app.py file and run it from the terminal:

python app.py
Enter fullscreen mode Exit fullscreen mode

The Flask development server will start, and you can access the URL shortener tool by navigating to http://127.0.0.1:5000 in your web browser.

Step 4: Testing the Tool

To shorten a URL, you can use a tool like curl or a simple HTML form. Here's a basic HTML form for testing:

<!DOCTYPE html>
<html>
<head>
    <title>URL Shortener</title>
</head>
<body>
    <form action="http://127.0.0.1:5000/shorten" method="post">
        <label for="url">Enter URL to shorten:</label>
        <input type="text" id="url" name="url">
        <input type="submit" value="Shorten">
    </form>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Save this HTML code as index.html and open it in your web browser. Enter a URL to shorten and submit the form. You should see a shortened URL that you can use to test the redirection functionality.

Conclusion

By following these steps, you can create a simple URL shortener tool using Python and Flask.

This tool can be further enhanced with additional features such as user authentication, analytics, and a database for storing URL mappings persistently.

Alternatively you can also read how to create a simple URL Shortener tool using Python.

Want to learn more? Explore programming articles, tips and tricks on ZeroByteCode.

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (2)

Collapse
 
stokry profile image
Stokry • Edited

I will do something like this:

import hashlib

url_dict = {}

BASE_URL = "http://localhost/"

def shorten_url(url):
    hash_object = hashlib.md5(url.encode())
    short_code = hash_object.hexdigest()[:6]
    short_url = BASE_URL + short_code
    url_dict[short_code] = url
    return short_url

def get_original_url(short_code):
    return url_dict.get(short_code, "Short URL not found!")

if __name__ == "__main__":
    while True:
        print("1. Shorten a URL")
        print("2. Retrieve original URL")
        print("3. Exit")
        choice = input("Enter your choice: ")

    if choice == '1':
        url = input("Enter the URL to shorten: ")
        short_url = shorten_url(url)
        print(f"Short URL is: {short_url}")
    elif choice == '2':
        short_url = input("Enter the short URL: ")
        short_code = short_url.replace(BASE_URL, "")
        original_url = get_original_url(short_code)
        print(f"Original URL is: {original_url}")
    elif choice == '3':
        break
    else:
        print("Invalid choice, please try again.")
Enter fullscreen mode Exit fullscreen mode
Collapse
 
zerobytecode profile image
ZeroByteCode

Nice, this is also cool and well-written.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay