DEV Community

KagemaNjoroge
KagemaNjoroge

Posted on

Django: The Framework That Will Ruin Your Life

You might have heard the hype, but behind the glamour lies a framework that will supposedly ruin your life. Or will it? Let's find out!

Django Framework
Django is Too Opinionated
One of the most common gripes about Django is its opinionated nature. Critics argue that Django imposes too many constraints and dictates how you should structure your application. But here's the thing: sometimes having a guiding hand is a good thing. Django's way of doing things might seem strict, but it's like having a mentor who's got your back.

Sure, Django might not be as flexible as some other frameworks, but that's precisely what makes it so powerful. With Django, you spend less time making decisions about architecture and more time building features that matter. So next time someone complains about Django's opinionated nature, remind them that sometimes a little structure goes a long way.
Django's learning curve
Critics also love to harp on about Django's learning curve, claiming that it's too steep for beginners. But let's be real here. Learning Django might not be a walk in the park, but the payoff is well worth it once you grasp the basics. Once you wrap your head around Django's concepts and conventions, you'll be deploying web applications faster than you can say "ORM."

Let's criticize plain old PHP
This post cannot end without criticizing PHP. For the reader who does not know what PHP is, PHP is an old programming language used in the 70s :).

Back to the point. Let's create a Database table the Django-way and PHP-way

Here's how you do it in Django

from django.db import models

class Todo(models.Model):
    task = models.CharField(max_length=200)
    completed = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.task

Enter fullscreen mode Exit fullscreen mode

In Django, defining a model is as simple as creating a Python class. Django's ORM automatically translates this model definition into SQL queries, handling the database operations behind the scenes. No more SQL errors!

Here's how it's done in PHP

<?php
// Connect to the database (ugh)
$conn = mysqli_connect("localhost", "username", "password", "dbname");

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// Create a SQL query to create a Todos table
$sql = "CREATE TABLE todos (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    task VARCHAR(200) NOT NULL,
    completed TINYINT(1) DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";

if (mysqli_query($conn, $sql)) {
    echo "Table created successfully";
} else {
    echo "Error creating table: " . mysqli_error($conn);
}

// Don't forget to close the connection (seriously?)

mysqli_close($conn);
?>
Enter fullscreen mode Exit fullscreen mode

In PHP, creating a database table involves writing raw SQL queries. As you can see, the process is more manual and error-prone compared to Django's approach. Additionally, handling CRUD operations in PHP typically requires writing custom SQL queries for each operation, resulting in more code to maintain and debug.
Batteries included
"Batteries included" is a concept that refers to providing a comprehensive set of tools and features out-of-the-box, eliminating the need for developers to seek and integrate third-party libraries for basic functionalities.
Django acts like a pre-equipped toolbox, providing built-in features for:

  • User authentication and authorization: Securely managing user logins and access permissions.
  • Database interactions: Easily storing and retrieving data.
  • URL routing: Mapping website URLs to specific functions in your code.
  • Templating: Creating dynamic web pages with reusable components.
  • Administrative interface: With just a few lines of code, you get a fully functional backend admin panel. It's like magic, but better.

Consider giving Django a try for a smoother and more efficient development experience.
So go ahead, embrace the Django way of life. Sure, it might ruin your life... in the best way possible.

Happy coding :)

Top comments (2)

Collapse
 
sreno77 profile image
Scott Reno

I like Django but your comparison to PHP is invalid. No one uses plain PHP to make websites... a much better example would be showing how to do the same thing with Laravel.

Collapse
 
giullianosep profile image
Giulliano Ferreira

If you want to compare Python with PHP, that's fine, Python is much better in my opinion. But comparing Python + Django with plain PHP is not fair. It would be better to compare Django with Laravel and that would be a more fair "fight". By the way, I wish Django were more like Laravel and Rails.