Game Review Website

By Moritz Leopold

Created on January 19, 2025


Overview of the review website.

Overview of the review website.

Single project – Web application built with Django

This self-developed game review platform allows users to create games, rate them and publish reviews. The project covers the entire development process from concept to implementation.

The goal was to build a user-friendly and visually appealing platform that enables gamers to share opinions and showcase their favorite games.


🔹 Core Features

👤

User Accounts

Registration, login & personal dashboard for every user.

🎮

Game Catalog

Searchable overview of all games with ratings and reviews.

📝

Review System

Users can publish game reviews including rating & avatar.


🔹 Tech Stack & Tools

  • Backend: Django
  • Frontend: HTML/CSS with template customizations
  • Database: SQLite
  • IDE: PyCharm
  • Additional tools:
    • Pillow (image processing)
    • django-gravatar2 (avatars via e-mail)

🔹 Data Model

The site is based on a relational schema with three main models:

  • User: Django built-in authentication
  • Review: relation to game and user, rating, review text, timestamp
  • Game: title, description, developer, image, average rating
Simplified DB structure: relationships between games, users and reviews.

Simplified DB structure: relationships between games, users and reviews.


🔹 Code example (upload view)

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect, get_object_or_404
from .forms import ReviewForm
from .models import Game


@login_required()
def upload_review(request):
    game_id = request.GET.get('game_id')
    game = get_object_or_404(Game, id=game_id) if game_id else None

    if request.method == 'POST':
        form = ReviewForm(request.POST, request.FILES)
        if form.is_valid():
            review = form.save(commit=False)
            review.user_id = request.user.id
            review.save()

            calculate_and_update_average_rating(review.game)

            return redirect('game-reviews', review.game_id)
    else:
        form = ReviewForm(initial=dict(game=game))
    return render(request, 'upload_review.html', dict(upload_review=form))

This view handles review uploads and uses a dedicated template — an example of Django’s modular customization.


🔹 Challenges & Solutions

  • Form styling: Django forms required manual CSS and template overrides to achieve the desired layout.
  • Gravatar integration: Retrieving avatar images via email and fitting them into the layout — solved by template tweaks and using django-gravatar2.

💬 Conclusion & Outlook

The project was a valuable learning experience, especially working with Django, template customization and relational DB design. The site fulfills the initial requirements and provides a solid base for future features like:

  • Rating system for reviews
  • Filtering & search functionality
  • REST API for external tools
Game detail page with embedded reviews and user avatars.

Game detail page with embedded reviews and user avatars.