Files
patrickcanal.it/portfolio/views.py
T

69 lines
1.9 KiB
Python

from django.conf import settings
from django.db.models import Q
from django.http.response import FileResponse, HttpResponseBadRequest
from django.utils.translation import gettext as _
from django.views.generic import DetailView, ListView, TemplateView
from post_office import mail
from portfolio import forms, models
class PortfolioView(TemplateView):
template_name = "index.html"
def get_context_data(self, **kwargs):
contact_form = forms.ContactForm()
return {
"job_experiences": models.JobExperience.objects.all().order_by("-start"),
"contact_form": contact_form,
}
class ProjectList(TemplateView):
template_name = "project_list.html"
class ContactSend(TemplateView):
template_name = "contact_thanks.html"
def post(self, request, *args, **kwargs):
form = forms.ContactForm(request.POST)
if not form.is_valid():
return HttpResponseBadRequest(_("Invalid request"))
mail.send(
subject=form.cleaned_data["subject"],
message=form.cleaned_data["message"],
sender=settings.EMAIL_HOST_USER,
cc=form.cleaned_data["email"],
recipients=[settings.EMAIL_CONTACT],
)
return super().get(request, *args, **kwargs)
class CompanyLogo(DetailView):
model = models.Company
def get(self, request, *args, **kwargs):
company = self.get_object()
return FileResponse(company.logo)
class ProjectListQuery(ListView):
template_name = "project_list_query.html"
model = models.Project
def get_queryset(self):
query = self.request.GET.get("query")
if not query:
return super().get_queryset()
return (
super()
.get_queryset()
.filter(Q(name__contains=query) | Q(tags__name__contains=query))
.distinct()
)