inital commit
This commit is contained in:
95
builder/views.py
Normal file
95
builder/views.py
Normal file
@@ -0,0 +1,95 @@
|
||||
from pathlib import Path
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth import login
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import FileResponse, Http404, HttpRequest, HttpResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from .forms import ClientSiteForm, SignUpForm
|
||||
from .models import ClientSite, TemplateOption
|
||||
from .services import SiteGenerator
|
||||
|
||||
|
||||
class HomeView(TemplateView):
|
||||
template_name = "home.html"
|
||||
|
||||
|
||||
def signup_view(request: HttpRequest) -> HttpResponse:
|
||||
if request.user.is_authenticated:
|
||||
return redirect("dashboard")
|
||||
if request.method == "POST":
|
||||
form = SignUpForm(request.POST)
|
||||
if form.is_valid():
|
||||
user = form.save()
|
||||
login(request, user)
|
||||
return redirect("dashboard")
|
||||
else:
|
||||
form = SignUpForm()
|
||||
return render(request, "registration/signup.html", {"form": form})
|
||||
|
||||
|
||||
@login_required
|
||||
def dashboard_view(request: HttpRequest) -> HttpResponse:
|
||||
sites = ClientSite.objects.filter(owner=request.user).select_related("template_option")
|
||||
form = ClientSiteForm()
|
||||
form.fields["template_option"].queryset = TemplateOption.objects.filter(is_active=True)
|
||||
return render(request, "builder/dashboard.html", {"sites": sites, "form": form})
|
||||
|
||||
|
||||
@login_required
|
||||
def create_site_view(request: HttpRequest) -> HttpResponse:
|
||||
if request.method != "POST":
|
||||
return redirect("dashboard")
|
||||
|
||||
form = ClientSiteForm(request.POST)
|
||||
form.fields["template_option"].queryset = TemplateOption.objects.filter(is_active=True)
|
||||
if not form.is_valid():
|
||||
sites = ClientSite.objects.filter(owner=request.user).select_related("template_option")
|
||||
return render(request, "builder/dashboard.html", {"sites": sites, "form": form})
|
||||
|
||||
site = form.save(commit=False)
|
||||
site.owner = request.user
|
||||
site.status = ClientSite.Status.GENERATING
|
||||
site.save()
|
||||
|
||||
generator = SiteGenerator()
|
||||
try:
|
||||
generator.build_all(site)
|
||||
messages.success(request, "Site generated successfully.")
|
||||
except Exception as exc:
|
||||
site.status = ClientSite.Status.FAILED
|
||||
site.last_error = str(exc)
|
||||
site.save(update_fields=["status", "last_error", "updated_at"])
|
||||
messages.error(request, "Generation failed. Check site detail for error info.")
|
||||
|
||||
return redirect("site_detail", site_id=site.id)
|
||||
|
||||
|
||||
@login_required
|
||||
def site_detail_view(request: HttpRequest, site_id) -> HttpResponse:
|
||||
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
|
||||
return render(request, "builder/site_detail.html", {"site": site})
|
||||
|
||||
|
||||
def _download_site_file(site: ClientSite, relative_path: str) -> FileResponse:
|
||||
if not relative_path:
|
||||
raise Http404("File not generated yet.")
|
||||
full_path = Path(settings.MEDIA_ROOT) / relative_path
|
||||
if not full_path.exists():
|
||||
raise Http404("File missing from storage.")
|
||||
return FileResponse(full_path.open("rb"), as_attachment=True, filename=full_path.name)
|
||||
|
||||
|
||||
@login_required
|
||||
def download_basic_site(request: HttpRequest, site_id) -> FileResponse:
|
||||
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
|
||||
return _download_site_file(site, site.basic_zip_path)
|
||||
|
||||
|
||||
@login_required
|
||||
def download_django_site(request: HttpRequest, site_id) -> FileResponse:
|
||||
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
|
||||
return _download_site_file(site, site.django_zip_path)
|
||||
Reference in New Issue
Block a user