Skip to main content

A simple Django Url Shortener.

Project description

django-link-shortener

image PyPI - License PyPI Codecov

django-link-shortener is a Django app for creating time-limited and usage-capped short URLs.

Features

  • Generate short links for URLs.
  • Time-sensitive links (configurable lifespan).
  • Usage-limited links (configurable maximum uses).
  • Per-user override of default settings via Django admin.
  • Test endpoint for easy shortcode creation during development.
  • Character set for shortcodes excludes I, i, 1.

Usage

  1. Install with pip install django-link-shortener

  2. Add shortener to your INSTALLED_APPS setting:

    INSTALLED_APPS = [
        ...
        'shortener',
    ]
    
  3. Include shortener.urls in your project urls.py:

    path('s/', include('shortener.urls')),
    
  4. Run python manage.py migrate to create the shortener models.

  5. Use shortener.create(user, link) to generate a shortcode.

    from shortener import shortener
    
    user = User.objects.first()
    shortener.create(user, "https://example.com")
    
  6. To expand the shortcode use shortener.expand(shorlink_id), or visit http://127.0.0.1:8000/s/<shortcode>/.

Test Endpoint

  1. To enable the test endpoint, add the following to settings:

    SHORTENER_ENABLE_TEST_PATH = True
    
  2. Start the development server and visit http://127.0.0.1:8000/s/test/<my-url-here> to create a test shortcode.

  3. Visit http://127.0.0.1:8000/s/<shortcode>/ to be redirected

Configuration Options

Place in settings.py. Each setting can be overridden on a per-user basis using the UrlProfile section in the Django admin.

SHORTENER_ENABLED
Default: True

Controls whether users without a shortener profile can create shortlinks.

SHORTENER_MAX_URLS
Default: -1

Controls the default maximum limit of generated urls per account. -1 sets infinite.

SHORTENER_MAX_CONCURRENT
Default: -1

Controls the default maximum limit of concurrent (active) generated urls per account. -1 sets infinite.

SHORTENER_LIFESPAN
Default: -1

Sets the default lifespan of links in seconds. -1 sets infinite.

SHORTENER_MAX_USES
Default: -1

Sets the default amount of times a link can be followed. -1 sets infinite.

SHORTENER_LENGTH
Default: 5

Note: Omitted from UrlProfile.

Sets how many digits should be used for links. Tries up to three times to generate a unique shortcode where Each failure will result in length temporarily being increased by 1.

SHORTENER_ENABLE_TEST_PATH
Default: False

If true, creates shortlinks on authenticated requests to s/test/<url>/ and returns a shortcode.

Common Use Cases

goo.gl type usage (default). Unlimited concurrent links for an unlimited length of time

SHORTENER_ENABLED = True
SHORTENER_MAX_URLS = -1
SHORTENER_MAX_CONCURRENT = -1
SHORTENER_LIFESPAN = -1
SHORTENER_MAX_USES = -1

Internal temporary link usage. 100 active links with a lifespan of 1 hour. 1 usage per link.

SHORTENER_ENABLED = True
SHORTENER_MAX_URLS = -1
SHORTENER_MAX_CONCURRENT = 100
SHORTENER_LIFESPAN = 600
SHORTENER_MAX_USES = 1

Changelog

v0.5

  • Replaced NullBooleanField with BooleanField (Credit: sen-den)
  • Replaced travis-ci with github actions

v0.4

  • Allow null values in UrlProfile; null fields will use global values
  • str representation of UrlProfile in admin
  • add user to str representation of UrlMap
  • removed 256 char limit on full_url (Credit: Khaeshah)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_link_shortener-1.0.1.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

django_link_shortener-1.0.1-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page