Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions lettings/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@


class Address(models.Model):
"""
Model representing a physical address.

This model stores :
number, street, city, state, zip code, and country code.
"""
number = models.PositiveIntegerField(validators=[MaxValueValidator(9999)])
street = models.CharField(max_length=64)
city = models.CharField(max_length=64)
Expand All @@ -11,12 +17,26 @@ class Address(models.Model):
country_iso_code = models.CharField(max_length=3, validators=[MinLengthValidator(3)])

def __str__(self):
"""
Returns a string representation of the address.

Returns:
str: The address in the format 'number street'
"""
return f'{self.number} {self.street}'


class Letting(models.Model):
"""
Model representing a property letting.

This model stores title and associated addresses.
"""
title = models.CharField(max_length=256)
address = models.OneToOneField(Address, on_delete=models.CASCADE)

def __str__(self):
"""
Returns the title of the letting.
"""
return self.title
21 changes: 21 additions & 0 deletions lettings/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,32 @@
from .models import Letting

def index(request):
"""
View function for the lettings list page.

Args:
request: The HTTP request object
Returns:
template 'lettings/index.html' with a list of all lettings
"""
lettings_list = Letting.objects.all()
context = {'lettings_list': lettings_list}
return render(request, 'lettings/index.html', context)

def letting(request, letting_id):
"""
View function for displaying a specific letting's details.

Args:
request: The HTTP request object
letting_id: The ID of the letting to display

Returns:
template 'lettings/letting.html' with the requested letting's details

Raises:
Http404: If the letting with the given ID doesn't exist
"""
letting = get_object_or_404(Letting, id=letting_id)
context = {
'title': letting.title,
Expand Down
28 changes: 27 additions & 1 deletion oc_lettings_site/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,38 @@
from django.http import Http404

def index(request):
"""
View function for the home page.

Args:
request: The HTTP request object

Returns:
Rendered template 'index.html'
"""
return render(request, 'index.html')

def test_404(request):
"""
Test view that raises a 404 error.

Args:
request: The HTTP request object

Raises:
Http404: Always raises a 404 error for testing purposes
"""
raise Http404("Page de test 404")

def test_500(request):
# Forcer une erreur 500 en divisant par zéro
"""
Test view that raises a 500 error by performing a division by zero.

Args:
request: The HTTP request object

Returns:
This function never returns as it raises a ZeroDivisionError
"""
division_by_zero = 1 / 0
return render(request, 'index.html')
12 changes: 12 additions & 0 deletions profiles/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,20 @@


class Profile(models.Model):
"""
Model representing a user profile.

This model extends the default Django User model with additional information
about the user's favorite city.
"""
user = models.OneToOneField(User, on_delete=models.CASCADE)
favorite_city = models.CharField(max_length=64, blank=True)

def __str__(self):
"""
Returns the username of the associated user.

Returns:
str: The username of the user
"""
return self.user.username
22 changes: 22 additions & 0 deletions profiles/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,33 @@
from .models import Profile

def index(request):
"""
View function for the profiles list page.

Args:
request: The HTTP request object

Returns:
Rendered template 'profiles/index.html' with a list of all profiles
"""
profiles_list = Profile.objects.all()
context = {'profiles_list': profiles_list}
return render(request, 'profiles/index.html', context)

def profile(request, username):
"""
View function for displaying a specific user's profile.

Args:
request: The HTTP request object
username: The username of the profile to display

Returns:
Rendered template 'profiles/profile.html' with the requested profile

Raises:
Http404: If the profile with the given username doesn't exist
"""
profile = get_object_or_404(Profile, user__username=username)
context = {'profile': profile}
return render(request, 'profiles/profile.html', context)