0% found this document useful (0 votes)
32 views7 pages

Views

The document defines several views and functions for a job board application built with Django. It includes views for the home page, listing jobs, searching jobs, viewing a single job, applying to jobs, user dashboards, and bookmarking/saving jobs. Models and forms are used to interact with the database and handle requests. Pagination is implemented for listing jobs and search results.

Uploaded by

food panda
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
32 views7 pages

Views

The document defines several views and functions for a job board application built with Django. It includes views for the home page, listing jobs, searching jobs, viewing a single job, applying to jobs, user dashboards, and bookmarking/saving jobs. Models and forms are used to interact with the database and handle requests. Pagination is implemented for listing jobs and search results.

Uploaded by

food panda
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

from django.

contrib import messages


from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.db.models import Q
from django.shortcuts import render, get_object_or_404, redirect
from django.urls import reverse, reverse_lazy
from django.http import Http404, HttpResponseRedirect, JsonResponse
from django.core.serializers import serialize
from django.views.decorators.cache import cache_page
from django.core.cache import cache

from .models import User


from .forms import *
from .models import *
from .permission import *

User = get_user_model()

def home_view(request):
published_jobs = Job.objects.filter(is_published=True).order_by('-timestamp')
jobs = published_jobs.filter(is_closed=False)
total_candidates = User.objects.filter(role='employee').count()
total_companies = User.objects.filter(role='employer').count()
paginator = Paginator(jobs, 3)
page_number = request.GET.get('page', None)
page_obj = paginator.get_page(page_number)

if request.is_ajax():
job_lists = []
job_objects_list = page_obj.object_list.values()
for job_list in job_objects_list:
job_lists.append(job_list)

next_page_number = None
if page_obj.has_next():
next_page_number = page_obj.next_page_number()

prev_page_number = None
if page_obj.has_previous():
prev_page_number = page_obj.previous_page_number()

data = {
'job_lists': job_lists,
'current_page_no': page_obj.number,
'next_page_number': next_page_number,
'no_of_page': paginator.num_pages,
'prev_page_number': prev_page_number
}
return JsonResponse(data)

context = {

'total_candidates': total_candidates,
'total_companies': total_companies,
'total_jobs': len(jobs),
'total_completed_jobs': len(published_jobs.filter(is_closed=True)),
'page_obj': page_obj
}
print('ok')
return render(request, 'jobapp/index.html', context)

@cache_page(60 * 15)
def job_list_View(request):
"""

"""
job_list = Job.objects.filter(is_published=True, is_closed=False).order_by('-
timestamp')
paginator = Paginator(job_list, 12)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)

context = {

'page_obj': page_obj,

}
return render(request, 'jobapp/job-list.html', context)

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employer
def create_job_View(request):
"""
Provide the ability to create a job post
"""
user = request.user # Get the authenticated user directly

form = JobForm(request.POST or None)


categories = Category.objects.all()

if request.method == 'POST':
if form.is_valid():
instance = form.save(commit=False)
instance.user = user
instance.save()
form.save_m2m() # Save ManyToManyField data (if any)
messages.success(
request, 'You have successfully posted your job! Please wait for
review.')
return redirect(reverse("jobapp:single-job", kwargs={'id':
instance.id}))
else:
# Form is not valid, render the form with errors
messages.error(request, 'Please correct the errors in the form.')

context = {
'form': form,
'categories': categories
}
return render(request, 'jobapp/post-job.html', context)

def single_job_view(request, id):


"""
Provide the ability to view job details
"""
if cache.get(id):
job = cache.get(id)
else:
job = get_object_or_404(Job, id=id)
cache.set(id, job, 60 * 15)
related_job_list = job.tags.similar_objects()

paginator = Paginator(related_job_list, 5)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)

context = {
'job': job,
'page_obj': page_obj,
'total': len(related_job_list)

}
return render(request, 'jobapp/job-single.html', context)

def search_result_view(request):
"""
User can search job with multiple fields

"""

job_list = Job.objects.order_by('-timestamp')

# Keywords
if 'job_title_or_company_name' in request.GET:
job_title_or_company_name = request.GET['job_title_or_company_name']

if job_title_or_company_name:
job_list = job_list.filter(title__icontains=job_title_or_company_name)
| job_list.filter(
company_name__icontains=job_title_or_company_name)

# location
if 'location' in request.GET:
location = request.GET['location']
if location:
job_list = job_list.filter(location__icontains=location)

# Job Type
if 'job_type' in request.GET:
job_type = request.GET['job_type']
if job_type:
job_list = job_list.filter(job_type__iexact=job_type)

# job_title_or_company_name = request.GET.get('text')
# location = request.GET.get('location')
# job_type = request.GET.get('type')

# job_list = Job.objects.all()
# job_list = job_list.filter(
# Q(job_type__iexact=job_type) |
# Q(title__icontains=job_title_or_company_name) |
# Q(location__icontains=location)
# ).distinct()

# job_list = Job.objects.filter(job_type__iexact=job_type) |
Job.objects.filter(
# location__icontains=location) | Job.objects.filter(title__icontains=text)
| Job.objects.filter(company_name__icontains=text)

paginator = Paginator(job_list, 10)


page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
context = {

'page_obj': page_obj,

}
return render(request, 'jobapp/result.html', context)

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employee
def apply_job_view(request, id):
form = JobApplyForm(request.POST or None)

user = get_object_or_404(User, id=request.user.id)


applicant = Applicant.objects.filter(user=user, job=id)

if not applicant:
if request.method == 'POST':

if form.is_valid():
instance = form.save(commit=False)
instance.user = user
instance.save()

messages.success(
request, 'You have successfully applied for this job!')
return redirect(reverse("jobapp:single-job", kwargs={
'id': id
}))

else:
return redirect(reverse("jobapp:single-job", kwargs={
'id': id
}))

else:

messages.error(request, 'You already applied for the Job!')

return redirect(reverse("jobapp:single-job", kwargs={


'id': id
}))

@login_required(login_url=reverse_lazy('account:login'))
def dashboard_view(request):
"""
"""
jobs = []
savedjobs = []
appliedjobs = []
total_applicants = {}
if request.user.role == 'employer':

jobs = Job.objects.filter(user=request.user.id)
for job in jobs:
count = Applicant.objects.filter(job=job.id).count()
total_applicants[job.id] = count

if request.user.role == 'employee':
savedjobs = BookmarkJob.objects.filter(user=request.user.id)
appliedjobs = Applicant.objects.filter(user=request.user.id)
context = {

'jobs': jobs,
'savedjobs': savedjobs,
'appliedjobs': appliedjobs,
'total_applicants': total_applicants
}

return render(request, 'jobapp/dashboard.html', context)

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employer
def delete_job_view(request, id):
job = get_object_or_404(Job, id=id, user=request.user.id)

if job:
job.delete()
messages.success(request, 'Your Job Post was successfully deleted!')

return redirect('jobapp:dashboard')

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employer
def make_complete_job_view(request, id):
job = get_object_or_404(Job, id=id, user=request.user.id)

if job:
try:
job.is_closed = True
job.save()
messages.success(request, 'Your Job was marked closed!')
except:
messages.success(request, 'Something went wrong !')

return redirect('jobapp:dashboard')

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employer
def all_applicants_view(request, id):
all_applicants = Applicant.objects.filter(job=id)

context = {
'all_applicants': all_applicants
}

return render(request, 'jobapp/all-applicants.html', context)

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employee
def delete_bookmark_view(request, id):
job = get_object_or_404(BookmarkJob, id=id, user=request.user.id)

if job:
job.delete()
messages.success(request, 'Saved Job was successfully deleted!')

return redirect('jobapp:dashboard')

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employer
def applicant_details_view(request, id):
applicant = get_object_or_404(User, id=id)

context = {

'applicant': applicant
}

return render(request, 'jobapp/applicant-details.html', context)

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employee
def job_bookmark_view(request, id):
form = JobBookmarkForm(request.POST or None)

user = get_object_or_404(User, id=request.user.id)


applicant = BookmarkJob.objects.filter(user=request.user.id, job=id)

if not applicant:
if request.method == 'POST':

if form.is_valid():
instance = form.save(commit=False)
instance.user = user
instance.save()

messages.success(
request, 'You have successfully save this job!')
return redirect(reverse("jobapp:single-job", kwargs={
'id': id
}))

else:
return redirect(reverse("jobapp:single-job", kwargs={
'id': id
}))
else:
messages.error(request, 'You already saved this Job!')

return redirect(reverse("jobapp:single-job", kwargs={


'id': id
}))

@login_required(login_url=reverse_lazy('account:login'))
@user_is_employer
def job_edit_view(request, id=id):
"""
Handle Job Update

"""

job = get_object_or_404(Job, id=id, user=request.user.id)


categories = Category.objects.all()
form = JobEditForm(request.POST or None, instance=job)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
# for save tags
# form.save_m2m()
messages.success(request, 'Your Job Post Was Successfully Updated!')
return redirect(reverse("jobapp:single-job", kwargs={
'id': instance.id
}))
context = {

'form': form,
'categories': categories
}

return render(request, 'jobapp/job-edit.html', context)

You might also like