ljg.sh/ljg/redirect/views.py

67 lines
1.8 KiB
Python

from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import Http404
from django.shortcuts import redirect, render
from django.utils.translation import gettext as _
from .forms import RedirectForm
from .models import Redirect
def go(request, name):
try:
obj = Redirect.objects.get(name=name)
except Redirect.DoesNotExist:
if request.user.has_perm("redirect.add_redirect"):
return redirect("redirect:manage", name=name)
raise Http404()
return redirect(obj)
@login_required
def manage(request, name):
try:
obj = Redirect.objects.get(name=name)
except Redirect.DoesNotExist:
obj = None
form = RedirectForm(instance=obj)
if request.method == "POST":
form = RedirectForm(request.POST, instance=obj)
if form.is_valid():
action = "add" if obj is None else "change"
if request.user.has_perm(f"redirect.{action}_redirect"):
obj = form.save(commit=False)
if action == "add":
obj.name = name
obj.owner = request.user
obj.save()
messages.success(
request,
_(
"Successfully %s redirect"
% ("added" if action == "add" else "changed")
),
)
else:
messages.error(
request, _(f"You do not have permission to {action} this redirect.")
)
return redirect("redirect:manage", name=name)
else:
return redirect("redirect:manage", name=name)
return render(
request,
"redirect/manage.html",
{"form": form, "name": name, "new": obj is None},
)