La tua pagina delle offerte di lavoro
Fa parte della sezione View basate su classi del percorso Django di Coddy. Lezione 17 di 18.
Chi pubblica annunci vuole un posto in cui trovare quelli che ha pubblicato. Il menu mostra già agli utenti che hanno effettuato l'accesso il link Your jobs a /my-jobs/, ma per ora non c'è nulla che risponda a quel link.
Da qui costruisci ciò che serve con quanto hai imparato in questa sezione, senza un esempio. La pagina è un elenco, quindi è una ListView. Le righe dipendono da chi effettua la richiesta, quindi vengono selezionate in get_queryset(), dove self.request.user è disponibile. Solo un utente che ha effettuato l'accesso ha annunci da visualizzare. Assegnale un template tutto suo: jobs/job_list.html è riservato all'elenco pubblico.
Sfida
MedioAggiungi /my-jobs/, una route chiamata mine:
- I visitatori non autenticati vengono reindirizzati alla pagina di accesso.
- Un utente vede l’intestazione
Your jobse tutti i propri annunci in un’unica pagina, dal più recente al meno recente, ciascuno in<li class="job">con il titolo in<strong>. - Se non ne ha:
You have not posted a job yet.
Premi Run, accedi come ada e premi Your jobs.
Provalo tu
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.urls import reverse_lazy
from django.views.generic import CreateView, DeleteView, DetailView, ListView, TemplateView, UpdateView
from .models import Job
class HomeView(TemplateView):
template_name = "jobs/home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["count"] = Job.objects.count()
context["latest"] = Job.objects.order_by("-posted").first()
return context
class AboutView(TemplateView):
template_name = "jobs/about.html"
class JobListView(ListView):
model = Job
context_object_name = "jobs"
ordering = ["-posted"]
paginate_by = 5
def get_queryset(self):
jobs = super().get_queryset()
city = self.request.GET.get("city")
if city:
jobs = jobs.filter(city=city)
return jobs
class JobDetailView(DetailView):
model = Job
class JobCreateView(LoginRequiredMixin, CreateView):
model = Job
fields = ["title", "company", "city", "salary", "description"]
def form_valid(self, form):
form.instance.posted_by = self.request.user
return super().form_valid(form)
class JobUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Job
fields = ["title", "company", "city", "salary", "description"]
def test_func(self):
return self.get_object().posted_by == self.request.user
class JobDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Job
success_url = reverse_lazy("jobs:list")
def test_func(self):
return self.get_object().posted_by == self.request.user
Tutte le lezioni di View basate su classi
Esercitati da solo: Playground Django