diff --git a/litl/forms.py b/litl/forms.py
index 0f3bad3..d4a9749 100644
--- a/litl/forms.py
+++ b/litl/forms.py
@@ -4,6 +4,7 @@
# Forms for litl. The main form is for creating the link.
from django import forms
+from django.core.exceptions import ValidationError
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
from .models import Slug
diff --git a/litl/templates/base.html b/litl/templates/base.html
index d0cbe92..a2084e3 100644
--- a/litl/templates/base.html
+++ b/litl/templates/base.html
@@ -23,6 +23,17 @@ Code
+ {% if messages %}
+
+ {% for message in messages %}
+ {% if message.tags == "error" %}
+
{{ message }}
+ {% else %}
+
{{ message }}
+ {% endif %}
+ {% endfor %}
+
+ {% endif %}
{% block content %}
{% endblock %}
diff --git a/litl/views.py b/litl/views.py
index a4c8eb2..15df9eb 100644
--- a/litl/views.py
+++ b/litl/views.py
@@ -4,7 +4,9 @@
# Views for litl.
from django.shortcuts import render
-from django.http import HttpResponseRedirect
+from django import forms
+from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
+from django.contrib import messages
from .settings import TEMPLATES, RANDOM_SLUG_LEN, UID_LEN
from .models import Slug
@@ -23,25 +25,31 @@ def index(request):
def AddSlug(request):
"""Display the form for creating a new slug.
"""
- if request.method == 'POST':
- form = SlugAddForm(request.POST)
- if form.is_valid():
- slug = form.save(commit=False)
-
- if slug.slug == '':
- while slug.slug=='':
- rand_string = ''.join(random.choice(ensemble) for _ in range(RANDOM_SLUG_LEN))
- if not Slug.objects.filter(slug=rand_string).exists():
- slug.slug = rand_string
- while slug.uid == None:
- rand_uid = ''.join(random.choice(ensemble) for _ in range(UID_LEN))
- if not Slug.objects.filter(uid = rand_uid).exists():
- slug.uid = rand_uid
-
- slug.save()
- return HttpResponseRedirect('display/{}'.format(slug.slug))
- else:
- form = SlugAddForm()
+ 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})
+
+ # 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))
+
+ # First call, return empty form
return render(request,'add_slug.html',{'form':form})
def display(request, slug_got):
@@ -58,5 +66,5 @@ def redirect(request,slug_got):
context = {'slug':slug_got,'request': request}
return render(request,'unknown.html',context)
else:
- return HttpResponseRedirect(slug.get().destination)
+ return HttpResponsePermanentRedirect(slug.get().destination)