Getting Started#
Django is an opinionated framework that provides a complete set of tools for web development, from URL routing to form handling and user authentication. It promotes best practices in web development through its structure and conventions, encouraging developers to write maintainable and scalable code. Django’s middleware system allows for global processing of requests and responses, enabling the implementation of complex features like session handling and caching with minimal effort.
👉 New to App-Generator? Sign IN with GitHub or Generate Web Apps in no time (free service).
Here are the basic steps to code a simple Django project:
Installation
pip install django
Create a project
django-admin startproject myproject
cd myproject
Create an app
python manage.py startapp myapp
Configure settings: Edit myproject/settings.py
INSTALLED_APPS = [
# ...
'myapp',
]
Define a model
from django.db import models
class Item(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return self.name
Create and apply migrations
python manage.py makemigrations
python manage.py migrate
Create a view
from django.shortcuts import render
from .models import Item
def item_list(request):
items = Item.objects.all()
return render(request, 'myapp/item_list.html', {'items': items})
Create a template
<h1>Items</h1>
<ul>
{% for item in items %}
<li>{{ item.name }} - {{ item.description }}</li>
{% endfor %}
</ul>
Configure URL patterns
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')),
]
Create myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.item_list, name='item_list'),
]
Run the development server
python manage.py runserver
Create a superuser
python manage.py createsuperuser
Register models in the admin: Edit myapp/admin.py
from django.contrib import admin
from .models import Item
admin.site.register(Item)
Forms Create myapp/forms.py
from django import forms
from .models import Item
class ItemForm(forms.ModelForm):
class Meta:
model = Item
fields = ['name', 'description']
Create, update, delete views: Add to myapp/views.py
from django.shortcuts import render, redirect, get_object_or_404
from .forms import ItemForm
from .models import Item
def item_create(request):
if request.method == 'POST':
form = ItemForm(request.POST)
if form.is_valid():
form.save()
return redirect('item_list')
else:
form = ItemForm()
return render(request, 'myapp/item_form.html', {'form': form})
def item_update(request, pk):
item = get_object_or_404(Item, pk=pk)
if request.method == 'POST':
form = ItemForm(request.POST, instance=item)
if form.is_valid():
form.save()
return redirect('item_list')
else:
form = ItemForm(instance=item)
return render(request, 'myapp/item_form.html', {'form': form})
def item_delete(request, pk):
item = get_object_or_404(Item, pk=pk)
if request.method == 'POST':
item.delete()
return redirect('item_list')
return render(request, 'myapp/item_confirm_delete.html', {'item': item})
Add URL patterns for CRUD operations Update myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.item_list, name='item_list'),
path('create/', views.item_create, name='item_create'),
path('update/<int:pk>/', views.item_update, name='item_update'),
path('delete/<int:pk>/', views.item_delete, name='item_delete'),
]
Static files: Configure STATIC_URL in settings.py
STATIC_URL = '/static/'
Use static files in templates:
{% load static %}
<link rel="stylesheet" href="{% static 'css/style.css' %}">
User authentication: Add to myapp/views.py
from django.contrib.auth.decorators import login_required
@login_required
def protected_view(request):
return render(request, 'myapp/protected.html')
Testing: Create tests in myapp/tests.py
from django.test import TestCase
from .models import Item
class ItemModelTest(TestCase):
def test_string_representation(self):
item = Item(name="Test Item")
self.assertEqual(str(item), item.name)
Run tests
python manage.py test
Database configuration: For PostgreSQL, install psycopg2 and update DATABASES in settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
Deployment preparation: Update settings.py for production:
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com']
This guide covers the fundamental aspects of Django. As you progress, explore more advanced topics like class-based views, Django REST framework for API development, and integrating with front-end frameworks.
Links#
👉 New to App-Generator? Join our 10k+ Community using GitHub One-Click SignIN.
👉
Download
products and start fast a new project👉 Bootstrap your startUp, MVP or Legacy project with a custom development sprint