django-link-shortener
django-link-shortener copied to clipboard
A simple link shortener for django
===================== django-link-shortener
.. image:: https://github.com/ronaldgrn/django-link-shortener/actions/workflows/django-tests.yml/badge.svg :target: https://github.com/ronaldgrn/django-link-shortener/actions/workflows/django-tests.yml
.. image:: https://img.shields.io/pypi/l/django-link-shortener.svg :alt: PyPI - License :target: https://pypi.org/project/django-link-shortener/
.. image:: https://img.shields.io/pypi/v/django-link-shortener.svg :alt: PyPI :target: https://pypi.org/project/django-link-shortener/
.. image:: https://coveralls.io/repos/github/ronaldgrn/django-link-shortener/badge.svg?branch=master :target: https://coveralls.io/github/ronaldgrn/django-link-shortener?branch=master
django-link-shortener is a simple time and usage sensitive url shortening app.
Uses A-Za-z0-9 with the exception of I, i and 1.
Requires user to be logged in for link creation.
Usage
-
pip install django-link-shortener
-
Add '
shortener'to your INSTALLED_APPS setting::INSTALLED_APPS = [ ... 'shortener', ]
-
Include
shortener.urlsin your project urls.py::path('s/', include('shortener.urls')),
-
Run
python manage.py migrateto create the shortener models.
Testing
- Add the following to settings
SHORTENER_ENABLE_TEST_PATH = True
-
Start the development server and visit http://127.0.0.1:8000/s/test/<My-URL-HERE> to create a test shortcode.
or
Use shortener.create(user, link) to generate a link via code. Use shortener.expand(link) to revert
-
Visit http://127.0.0.1:8000/s/
/ to be redirected
Configuration Options
Place in settings.py. Each setting be overridden on a per-user basis using the admin UrlProfile section
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 for logged in users at s/test/<
The response is the shortcode to use used at s/<
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 (such as on nodeferret.com). 100 Temp links per minute. 1 usage per link.
::
SHORTENER_ENABLED = True SHORTENER_MAX_URLS = -1 SHORTENER_MAX_CONCURRENT = 100 # To prevent spamming 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)
Upgrade Instructions
0.3 / 0.4 --> 0.5
::
pip install django-link-shortener==0.5 python manage.py migrate