python django tutorial basic to advanced

Python Code django tutorial write longest content from basic to advanced

2/2

Here's a comprehensive Django tutorial that covers everything from the basics to advanced concepts. This guide will walk you through setting up Django, creating and managing projects, understanding the core components, and diving into advanced features.

Django Tutorial: From Basics to Advanced

1. Introduction

Django is a high-level Python web framework that simplifies the development of web applications. It emphasizes rapid development and clean, pragmatic design. This tutorial will guide you through setting up Django, creating a basic web application, and advancing to more complex features.

2. Setting Up Django

2.1. Installation

Install Python: Ensure you have Python installed on your system. Django requires Python 3.6 or higher. You can download it from Python Code.org.

Create a Virtual Environment:

bash

Python Code -m venv myenv

source myenv/bin/activate # On Windows use `myenv\Scripts\activate`

Install Django:

bash

pip install django

Verify Installation:

bash

django-admin --version

2.2. Creating a Django Project

Create a New Project:

bash

django-admin startproject myproject

Navigate to the Project Directory:

bash

cd myproject

Run the Development Server:

bash

Python Code manage.py runserver

Visit http://127.0.0.1:8000/ in your browser to see the Django welcome page.

3. Django Basics

3.1. Django Project Structure

A Django project has the following basic structure:

manage.py: A command-line utility that lets you interact with this Django project.

myproject/: The project directory containing settings and configurations.

__init__.py: Marks the directory as a Python package.

settings.py: Contains settings for the project.

urls.py: Contains URL declarations.

wsgi.py: WSGI application for deploying the project.

3.2. Creating a Django App

Create a New App:

bash

Python Code manage.py startapp myapp

Add the App to INSTALLED_APPS in settings.py:

Python Code

INSTALLED_APPS = [

...

'myapp',

]

Create a View in myapp/views.py:

Python Code

from django.http import HttpResponse

def home(request):

return HttpResponse("Hello, Django!")

Configure URLs in myapp/urls.py:

Python Code

from django.urls import path

from . import views

urlpatterns = [

path('', views.home, name='home'),

]

Include App URLs in the Project’s URL Configuration (myproject/urls.py):

Python Code

from django.contrib import admin

from django.urls import include, path

urlpatterns = [

path('admin/', admin.site.urls),

path('', include('myapp.urls')),

]

Run the Development Server:

bash

Python Code manage.py runserver

Visit http://127.0.0.1:8000/ to see the "Hello, Django!" message.

4. Django Models and Database

4.1. Defining Models

Define a Model in myapp/models.py:

Python Code

from django.db import models

class Item(models.Model):

name = models.CharField(max_length=100)

description = models.TextField()

price = models.DecimalField(max_digits=10, decimal_places=2)

created_at = models.DateTimeField(auto_now_add=True)

def __str__(self):

return self.name

Create and Apply Migrations:

bash

Python Code manage.py makemigrations

Python Code manage.py migrate

Register the Model in Admin Interface (myapp/admin.py):

Python Code

from django.contrib import admin

from .models import Item

admin.site.register(Item)

4.2. Working with the Django Admin Interface

Create a Superuser:

bash

Python Code manage.py createsuperuser

Access the Admin Interface: Go to http://127.0.0.1:8000/admin/ and log in with the superuser credentials.

Manage Models: Use the admin interface to add, edit, and delete Item instances.

5. Django Forms and Templates

5.1. Creating Forms

Define a Form in myapp/forms.py:

Python Code

from django import forms

from .models import Item

class ItemForm(forms.ModelForm):

class Meta:

model = Item

fields = ['name', 'description', 'price']

Create a View for the Form in myapp/views.py:

Python Code

from django.shortcuts import render, redirect

from .forms import ItemForm

def add_item(request):

if request.method == 'POST':

form = ItemForm(request.POST)

if form.is_valid():

form.save()

return redirect('home')

else:

form = ItemForm()

return render(request, 'add_item.html', {'form': form})

Create a Template for the Form (myapp/templates/add_item.html):

html

<!DOCTYPE html>

<html>

<head>

<title>Add Item</title>

</head>

<body>

<h1>Add Item</h1>

<form method="post">

{% csrf_token %}

{{ form.as_p }}

<button type="submit">Submit</button>

</form>

</body>

</html>

Add URL Pattern for the Form (myapp/urls.py):

Python Code

urlpatterns = [

path('', views.home, name='home'),

path('add/', views.add_item, name='add_item'),

]

5.2. Using Templates

Create a Base Template (myapp/templates/base.html):

html

<!DOCTYPE html>

<html>

<head>

<title>{% block title %}My Site{% endblock %}</title>

</head>

<body>

<header>

<h1>My Site</h1>

<nav>

<ul>

<li><a href="{% url 'home' %}">Home</a></li>

<li><a href="{% url 'add_item' %}">Add Item</a></li>

</ul>

</nav>

</header>

<main>

{% block content %}

{% endblock %}

</main>

</body>

</html>

Extend the Base Template (myapp/templates/add_item.html):

html

{% extends "base.html" %}

{% block content %}

<h2>Add Item</h2>

<form method="post">

{% csrf_token %}

{{ form.as_p }}

<button type="submit">Submit</button>

</form>

{% endblock %}

6. Django Advanced Features

6.1. Class-Based Views

Using a Class-Based View for Item List (myapp/views.py):

Python Code

from django.views.generic import ListView, CreateView

from .models import Item

from .forms import ItemForm

class ItemListView(ListView):

model = Item

template_name = 'item_list.html'

class ItemCreateView(CreateView):

model = Item

form_class = ItemForm

template_name = 'add_item.html'

Configure URLs for Class-Based Views (myapp/urls.py):

Python Code

urlpatterns = [

path('', ItemListView.as_view(), name='home'),

path('add/', ItemCreateView.as_view(), name='add_item'),

]

6.2. Django REST Framework (DRF)

Install DRF:

bash

pip install djangorestframework

Add rest_framework to INSTALLED_APPS in settings.py:

Python Code

INSTALLED_APPS = [

...

'rest_framework',

]

Create a Serializer (myapp/serializers.py):

Python Code

from rest_framework import serializers

from .models import Item

class ItemSerializer(serializers.ModelSerializer):

class Meta:

model = Item

fields = '__all__'

Create API Views (myapp/views.py):

Python Code

from rest_framework import generics

from .models import Item

from .serializers import ItemSerializer

class ItemListCreateAPIView(generics.ListCreateAPIView):

queryset = Item.objects.all()

serializer_class = ItemSerializer

Configure API URLs (myapp/urls.py):

Python Code

from django.urls import path

from .views import ItemListCreateAPIView

urlpatterns = [

path('api/items/', ItemListCreateAPIView.as_view(), name='item-list-create'),

]

6.3. Middleware and Custom Middleware

Creating Custom Middleware (myapp/middleware.py):

Python Code

from django.utils.deprecation import MiddlewareMixin

class SimpleMiddleware(MiddlewareMixin):

def process_request(self, request):

print("Request:", request)

Adding Middleware to MIDDLEWARE in settings.py:

Python Code

MIDDLEWARE = [

...

'myapp.middleware.SimpleMiddleware',

]

6.4. Authentication and Authorization

Creating User Registration and Login:

Use Django's built-in user model and authentication views or create custom views.

Implement user authentication using django.contrib.auth.

Setting Up Permissions:

Use DRF’s permission classes to control access to API endpoints.

6.5. Caching

Setting Up Caching in settings.py:

Python Code

CACHES = {

'default': {

'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',

'LOCATION': '127.0.0.1:11211',

}

}

Using Cache in Views:

Python Code

from django.core.cache import cache

def my_view(request):

data = cache.get('my_data')

if not data:

data = expensive_query()

cache.set('my_data', data, timeout=60*15)

return render(request, 'template.html', {'data': data})

6.6. Django Signals

Using Signals:

Connect signals to perform actions when certain events occur, like saving a model.

Example (myapp/signals.py):

Python Code

from django.db.models.signals import post_save

from django.dispatch import receiver

from .models import Item

@receiver(post_save, sender=Item)

def item_saved(sender, instance, **kwargs):

print(f"Item {instance.name} was saved.")

Connect Signals in myapp/apps.py:

Python Code

from django.apps import AppConfig

class MyappConfig(AppConfig):

name = 'myapp'

def ready(self):

import myapp.signals

7. Deployment

7.1. Preparing for Deployment

Configure settings.py:

Set DEBUG = False

Configure ALLOWED_HOSTS

Set up static and media files

Use a Web Server like Gunicorn:

bash

pip install gunicorn

gunicorn myproject.wsgi

Set Up a Database in production (PostgreSQL, MySQL, etc.)

7.2. Using Docker

Create a Dockerfile:

Dockerfile

FROM Python Code:3.12

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY . .

CMD ["gunicorn", "myproject.wsgi:application"]

Create a docker-compose.yml:

yaml

version: '3'

services:

web:

build: .

command: gunicorn myproject.wsgi:application --bind 0.0.0.0:8000

volumes:

- .:/app

ports:

- "8000:8000"

Build and Run Docker Container:

bash

docker-compose up --build

Conclusion

This tutorial has covered the essential and advanced aspects of Django, from installation and basic app creation to complex features like class-based views, REST APIs, and deployment. Django’s rich ecosystem and powerful features make it a great choice for building scalable and maintainable web applications.

Top of Form

Post a Comment

Previous Post Next Post