From 152b58d9457ca95dc4bc9e87c0d540abf62a3eb0 Mon Sep 17 00:00:00 2001
From: Jacek Lebioda <jacek.lebioda.001@student.uni.lu>
Date: Wed, 15 Feb 2017 23:50:16 +0100
Subject: [PATCH] Getting non-existant objects will yield 404 instead of 500

---
 smash/web/models.py |  2 +-
 smash/web/views.py  | 50 +++++++++++++++++++++++++--------------------
 2 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/smash/web/models.py b/smash/web/models.py
index ff0dcb0a..c5b2915b 100644
--- a/smash/web/models.py
+++ b/smash/web/models.py
@@ -345,7 +345,7 @@ class Worker (models.Model):
         person = Worker.objects.filter(user=the_user)
 
         if len(person) == 0:
-            return (the_user.get_full_name(), 'Without worker information')
+            return (the_user.get_full_name(), '<No worker information>')
         else:
             # For get_*_display, see:
             # https://docs.djangoproject.com/en/1.10/topics/db/models/#field-options
diff --git a/smash/web/views.py b/smash/web/views.py
index 367fc0a2..d48eade1 100644
--- a/smash/web/views.py
+++ b/smash/web/views.py
@@ -1,6 +1,6 @@
 from __future__ import unicode_literals
 from django.contrib.auth.decorators import login_required
-from django.shortcuts import redirect, render
+from django.shortcuts import redirect, render, get_object_or_404
 from django.http import HttpResponse
 from django.template import loader
 from django.views import generic
@@ -89,7 +89,7 @@ def visits(request):
 
 
 def visit_details(request, id):
-	displayedVisit = Visit.objects.get(id=id)
+	displayedVisit = get_object_or_404(Visit, id=id)
 	visFinished = displayedVisit.is_finished
 	vid = displayedVisit.id
 	displayedSubject = displayedVisit.subject
@@ -136,34 +136,37 @@ def subject_add(request):
 
 
 def subject_details(request, id):
-	form = SubjectDetailForm(instance=Subject.objects.get(id=id))
+	the_subject = get_object_or_404(Subject, id=id)
+	form = SubjectDetailForm(instance=the_subject)
 	sid = id
 
 	return wrap_response(request, 'subjects/details.html', {'form': form, 'sid': sid})
 
 
 def subject_edit(request, id):
+	the_subject = get_object_or_404(Subject, id=id)
 	if request.method == 'POST':
-		form = SubjectEditForm(request.POST, request.FILES, instance=Subject.objects.get(id=id))
+		form = SubjectEditForm(request.POST, request.FILES, instance=the_subject)
 		if form.is_valid():
 			form.save()
 			return redirect(subjects)
 	else:
-		form = SubjectEditForm(instance=Subject.objects.get(id=id))
+		form = SubjectEditForm(instance=the_subject)
 	return wrap_response(request, 'subjects/edit.html', {'form': form, 'id':id})
 
 
 def subject_delete(request, id):
+    the_subject = get_object_or_404(Subject, id=id)
     if request.method == 'POST':
-		Subject.objects.get(id=id).delete()
-		return redirect(subjects)
+        the_subject.delete()
+        return redirect(subjects)
     else:
-		form = SubjectEditForm(instance=Subject.objects.get(id=id))
+        form = SubjectEditForm(instance=the_subject)
     return wrap_response(request, 'subjects/delete.html', {'form': form})
 
 
 def subject_mark(request, id, as_what):
-	who = Subject.objects.get(id=id)
+	who = get_object_or_404(Subject, id=id)
 	if as_what == 'dead':
 		who.mark_as_dead()
 	elif as_what == 'rejected':
@@ -171,8 +174,7 @@ def subject_mark(request, id, as_what):
 	return redirect(subject_edit, id=id)
 
 def subject_visit_details(request, id):
-
-	locsubject = Subject.objects.get(id=id)
+	locsubject = get_object_or_404(Subject, id=id)
 	visits = locsubject.visit_set.all()
 	endlist = []
 	for vis in visits:
@@ -210,18 +212,20 @@ def doctor_add(request):
 
 
 def doctor_edit(request, doctor_id):
+	the_doctor = get_object_or_404(Worker, id=doctor_id)
 	if request.method == 'POST':
-		form = WorkerEditForm(request.POST, request.FILES, instance=Worker.objects.get(id=doctor_id))
+		form = WorkerEditForm(request.POST, request.FILES, instance=the_doctor)
 		if form.is_valid():
 			form.save()
 			return redirect(doctors)
 	else:
-		form = WorkerEditForm(instance=Worker.objects.get(id=doctor_id))
+		form = WorkerEditForm(instance=the_doctor)
 	return wrap_response(request, 'doctors/edit.html', {'form': form})
 
 
 def doctor_details(request, doctor_id):
-	form = WorkerDetailForm(instance=Worker.objects.get(id=doctor_id))
+	the_doctor = get_object_or_404(Worker, id=doctor_id)
+	form = WorkerDetailForm(instance=the_doctor)
 
 	return wrap_response(request, 'doctors/details.html', {'form': form})
 
@@ -311,7 +315,8 @@ def appointments(request):
 	return wrap_response(request, "appointments/index.html",context)
 
 def appointment_details(request, id):
-	form = AppointmentDetailForm(instance=Appointment.objects.get(id=id))
+	the_appointment = get_object_or_404(Appointment, id=id)
+	form = AppointmentDetailForm(instance=the_appointment)
 	return wrap_response(request, 'appointments/details.html', {'form': form})
 
 
@@ -329,30 +334,31 @@ def appointment_add(request, id):
 	return wrap_response(request, 'appointments/add.html', {'form': form, 'visitID': id})
 
 def appointment_edit(request, id):
+	the_appointment = get_object_or_404(Appointment, id=id)
 	if request.method == 'POST':
-		form = AppointmentEditForm(request.POST, request.FILES, instance=Appointment.objects.get(id=id))
+		form = AppointmentEditForm(request.POST, request.FILES, instance=the_appointment)
 		if form.is_valid():
 			form.save()
 
 			data = form.cleaned_data
 			vis = data['visit']
-			visit = Visit.objects.get(id=vis.id)
+			visit = get_object_or_404(Visit, id=vis.id)
 			visit.end_if_appointments_were_finished()
 
 			return redirect(appointments)
 	else:
-		form = AppointmentEditForm(instance=Appointment.objects.get(id=id))
+		form = AppointmentEditForm(instance=the_appointment)
 	return wrap_response(request, 'appointments/edit.html', {'form': form})
 
 
 def appointment_edit_datetime(request, id):
+	the_appointment = get_object_or_404(Appointment, id=id)
 	if request.method == 'POST':
-		form = AppointmentEditForm(request.POST, request.FILES, instance=Appointment.objects.get(id=id))
+		form = AppointmentEditForm(request.POST, request.FILES, instance=the_appointment)
 		if form.is_valid():
 			form.save()
 			return redirect(appointments)
 	else:
-		obj = Appointment.objects.get(id=id)
-		obj.datetime_when = obj.visit.datetime_begin
-		form = AppointmentEditForm(instance=obj)
+		the_appointment.datetime_when = the_appointment.visit.datetime_begin
+		form = AppointmentEditForm(instance=the_appointment)
 	return wrap_response(request, 'appointments/edit.html', {'form': form})
-- 
GitLab