Skip to content
>_devvkit
$devvkit learn --librarie django-guide

Django Guide

[python][web][full-stack]
Python
Install
pip install django
django-admin startproject myproject

Django comes with everything: ORM, admin panel, authentication, forms, and template engine.

The ORM supports model inheritance, complex querysets, migrations, and raw SQL.

Django REST Framework provides serializers, viewsets, and browsable API documentation.

Setup

Create projectScaffold new project.
django-admin startproject myproject
cd myproject
python manage.py runserver
Create appNew app.
python manage.py startapp blog
# Add 'blog' to INSTALLED_APPS

Models & ORM

Define modelDatabase model.
from django.db import models
class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
MigrationsApply schema changes.
python manage.py makemigrations
python manage.py migrate
QuerySetQuery database.
Post.objects.filter(author__username='admin')
Post.objects.get(id=1)
Post.objects.order_by('-created_at')[:5]
Create recordInsert data.
Post.objects.create(title='Hello', content='World', author=User.objects.first())

Views & URLs

Class-based viewGeneric list view.
from django.views.generic import ListView
class PostListView(ListView):
    model = Post
    template_name = 'blog/post_list.html'
URL configMap URLs.
from django.urls import path
from . import views
urlpatterns = [
    path('', views.PostListView.as_view(), name='list'),
    path('<int:pk>/', views.post_detail, name='detail'),
]

Admin

Admin registrationMake model editable in admin.
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'created_at')

Django REST Framework

DRF ViewSetCRUD API endpoint.
from rest_framework import viewsets
class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
DRF RouterAuto URL routes.
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('posts', PostViewSet)
urlpatterns = router.urls

Testing

pytest-djangoTest with DB.
import pytest
@pytest.mark.django_db
def test_create_post():
    post = Post.objects.create(title='Test', content='...', author=user)
    assert Post.objects.count() == 1