@ -9,7 +9,7 @@ from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
from django . contrib import messages
from . settings import TEMPLATES , RANDOM_SLUG_LEN , UID_LEN
from . models import Slug
from . models import Slug , Destination
from . forms import SlugAddForm
import random , string
@ -25,39 +25,50 @@ def index(request):
def AddSlug ( request ) :
""" Display the form for creating a new slug.
"""
form = SlugAddForm ( request . POST or None )
if request . method == ' POST ' and form . is_valid ( ) :
# Add slug if needed
if form . cleaned_data [ ' slug ' ] == ' ' :
rand_slug = ' ' . join ( random . choice ( ensemble ) for _ in range ( RANDOM_SLUG_LEN ) )
while Slug . object . filter ( slug = rand_slug ) . exists ( ) :
rand_string = ' ' . join ( random . choice ( ensemble ) for _ in range ( RANDOM_SLUG_LEN ) )
form . cleaned_data [ ' slug ' ] = rand_string
else :
# If slug added by the user, check uniqueness
if Slug . objects . filter ( slug = form . cleaned_data [ ' slug ' ] ) . exists ( ) :
messages . error ( request , " This slug is already in use. " )
return render ( request , ' add_slug.html ' , { ' form ' : form } )
if request . method == ' POST ' :
form = SlugAddForm ( request . POST )
if form . is_valid ( ) :
# Add slug if needed
if form . cleaned_data [ ' slug ' ] == ' ' :
rand_slug = ' ' . join ( random . choice ( ensemble ) for _ in range ( RANDOM_SLUG_LEN ) )
while Slug . object . filter ( slug = rand_slug ) . exists ( ) :
rand_string = ' ' . join ( random . choice ( ensemble ) for _ in range ( RANDOM_SLUG_LEN ) )
form . cleaned_data [ ' slug ' ] = rand_string
else :
# If slug added by the user, check uniqueness
if Slug . objects . filter ( slug = form . cleaned_data [ ' slug ' ] ) . exists ( ) :
messages . error ( request , " This slug is already in use. " )
return render ( request , ' add_slug.html ' , { ' form ' : form } )
# Generate uid
rand_uid = ' ' . join ( random . choice ( ensemble ) for _ in range ( UID_LEN ) )
while Slug . objects . filter ( uid = rand_uid ) . exists ( ) :
# Generate uid
rand_uid = ' ' . join ( random . choice ( ensemble ) for _ in range ( UID_LEN ) )
slug = form . save ( commit = False )
slug . uid = rand_uid
slug . save ( )
return HttpResponseRedirect ( ' display/ {} ' . format ( slug . slug ) )
while Slug . objects . filter ( uid = rand_uid ) . exists ( ) :
rand_uid = ' ' . join ( random . choice ( ensemble ) for _ in range ( UID_LEN ) )
slug = Slug ( slug = form . cleaned_data [ ' slug ' ] ,
uid = rand_uid ,
bulk = form . cleaned_data [ ' bulk ' ] , )
slug . save ( )
destination = Destination ( slug = slug ,
destination = form . cleaned_data [ ' destination ' ] , )
destination . save ( )
return HttpResponseRedirect ( ' display/ {} ' . format ( slug . slug ) )
else :
form = SlugAddForm ( )
# First call, return empty form
return render ( request , ' add_slug.html ' , { ' form ' : form } )
def display ( request , slug_got ) :
slug = Slug . objects . filter ( slug = slug_got ) . all ( )
if slug . count ( ) != 1 :
return render ( request , ' unknown.html ' , { ' slug ' : slug_got } )
else :
context = { ' slug ' : slug . get ( ) , ' request ' : request }
destinations = Destination . objects . filter ( slug = slug . get ( ) ) . all ( )
context = { ' slug ' : slug . get ( ) , ' destinations ' : destinations , ' request ' : request }
return render ( request , ' display.html ' , context )
def redirect ( request , slug_got ) :
@ -66,5 +77,6 @@ def redirect(request,slug_got):
context = { ' slug ' : slug_got , ' request ' : request }
return render ( request , ' unknown.html ' , context )
else :
return HttpResponsePermanentRedirect ( slug . get ( ) . destination )
destinations = Destination . objects . filter ( slug = slug . get ( ) ) . all ( )
return HttpResponsePermanentRedirect ( destinations . first ( ) . destination )