|
|
|
@ -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))
|
|
|
|
|
while Slug.objects.filter(uid = rand_uid).exists():
|
|
|
|
|
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))
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|