DEV Community

Cover image for Django Basics: A Comprehensive Guide
kihuni
kihuni

Posted on

Django Basics: A Comprehensive Guide

Django is a Python web framework for fast development and clean design. This guide covers the Django app structure, models, views, templates, and URL configuration. It is structured to help you build your understanding incrementally, enabling you to work efficiently with Django. By the end of the guide, you will have a comprehensive understanding of Django's core components, empowering you to build robust web applications.

Django App Structure

A Django app is a self-contained module that delivers a specific functionality for your web project. You can reuse apps in different projects, making them modular and flexible.

Examples of Django apps include a blog, a forum, a user authentication system, or an e-commerce module.

Creating and Organizing Apps

Run the command python manage.py startapp appname to create a new app. Replace appname with the desired name of your app.

App Structure:


appname/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Enter fullscreen mode Exit fullscreen mode
  • init.py: Marks the directory as a Python package.

  • admin.py: Contains configurations for the Django admin interface.

  • apps.py: Contains app-specific configuration.

  • models.py: Defines the data models.

  • tests.py: Contains tests for the app.

  • views.py: Contains the logic for handling requests and returning responses.

  • migrations/: Manages changes to the database schema.

Organizing Apps

Focus Each App on a Single Piece of Functionality
Focusing each app on a single piece of functionality helps maintain clean and understandable code. This modular approach ensures that each app is self-contained and reusable across different projects. Common Practices include:

  • Organize related files, such as templates, static files, and forms, within the app directory. This organization helps keep the structure clear and logical.

Example: Blog App Directory Structure


blog/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py
    templates/
        blog/
            post_list.html
            post_detail.html
    static/
        blog/
            css/
                styles.css
    forms.py
    urls.py
Enter fullscreen mode Exit fullscreen mode

Templates: Store template files in the templates/blog/ directory.
Static Files: Store static files like CSS in the static/blog/ directory.
Forms: Define forms in the forms.py file.

  • Create separate apps for distinct features or sections of your project to ensure modularity and ease of maintenance.

Example: Project Directory Structure with Multiple Apps

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    blog/
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py
        templates/
            blog/
                post_list.html
                post_detail.html
        static/
            blog/
                css/
                    styles.css
        forms.py
        urls.py
    accounts/
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py
        templates/
            accounts/
                login.html
                signup.html
        static/
            accounts/
                css/
                    accounts.css
        forms.py
        urls.py
Enter fullscreen mode Exit fullscreen mode

Blog App: Contains all the files related to the blog functionality, including models, views, templates, and static files.
Accounts App: Contains all the files related to user authentication, such as login and signup templates, forms, and static files.

Models

Introduction to Models

  • Models are the single, definitive source of information about your data. They contain the essential fields and behaviors of the data you’re storing.

  • Models define the structure of your database tables and provide a high-level abstraction for database operations.

Defining Models and Fields

  • Basic Structure:

A model is a Python class that subclasses django.db.models.Model. Each attribute of the model represents a database field.

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    birth_date = models.DateField()

Enter fullscreen mode Exit fullscreen mode
  • Model Methods and Properties

Define custom methods to add functionality to your models.

class Author(models.Model):
    name = models.CharField(max_length=100)
    birth_date = models.DateField()

    def __str__(self):
        return self.name

    def age(self):
        return timezone.now().year - self.birth_date.year

Enter fullscreen mode Exit fullscreen mode

Views

Function-based Views (FBVs)

Function-based views are simple Python functions that take a web request and return a web response.

Example:

from django.http import HttpResponse

def my_view(request):
    return HttpResponse("Hello, world!")

Enter fullscreen mode Exit fullscreen mode

Class-based Views (CBVs)

Class-based views provide more structure and reusability by using Python classes.

from django.views import View
from django.http import HttpResponse

class MyView(View):
    def get(self, request):
        return HttpResponse("Hello, world!")

Enter fullscreen mode Exit fullscreen mode

Rendering Templates

Templates generate HTML dynamically.

from django.shortcuts import render

def my_view(request):
    return render(request, 'my_template.html', {'key': 'value'})

Enter fullscreen mode Exit fullscreen mode

Templates

Template Syntax and Language

  • Django’s template language defines the layout and structure of the HTML files.

  • Use curly braces and percentage signs for logic and variable substitution.

<h1>{{ title }}</h1>
{% for item in item_list %}
    <p>{{ item }}</p>
{% endfor %}

Enter fullscreen mode Exit fullscreen mode

Template Inheritance and Context

Create a base template and extend it for other pages.

<!-- base.html -->
<html>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

<!-- child.html -->
{% extends "base.html" %}
{% block content %}
    <h1>Child Template</h1>
{% endblock %}

Enter fullscreen mode Exit fullscreen mode

Context is a dictionary of variables passed to the template.

def my_view(request):
    context = {'title': 'My Title', 'item_list': ['item1', 'item2']}
    return render(request, 'my_template.html', context)

Enter fullscreen mode Exit fullscreen mode

URLs

URL Configuration and Routing

URLs define how the requests route to the appropriate view based on the URL pattern.

Example:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('about/', views.about, name='about'),
]

Enter fullscreen mode Exit fullscreen mode
  • Named URLs and Namespaces

Assign names to your URL patterns for easy reference.

urlpatterns = [
    path('about/', views.about, name='about'),
]

Enter fullscreen mode Exit fullscreen mode
  • Using Named URLs:
<a href="{% url 'about' %}">About Us</a>

Enter fullscreen mode Exit fullscreen mode
  • Namespaces: Group URL patterns by app to avoid name clashes.
app_name = 'myapp'
urlpatterns = [
    path('about/', views.about, name='about'),
]

Enter fullscreen mode Exit fullscreen mode

Conclusion

This guide has provided a structured overview of the basics of Django, from understanding the app structure to defining models, creating views, working with templates, and configuring URLs. By following these steps, you will be well-equipped to start building robust and maintainable web applications with Django. As you continue to develop your skills, you will find Django to be a powerful and versatile framework that streamlines web development and allows you to focus on creating great applications.

Top comments (0)