{"id":1206,"date":"2021-04-25T08:08:56","date_gmt":"2021-04-25T08:08:56","guid":{"rendered":"https:\/\/codeinsightacademy.com\/blog\/?p=1206"},"modified":"2026-04-17T03:30:59","modified_gmt":"2026-04-17T03:30:59","slug":"django-restframework-cheat-sheet","status":"publish","type":"post","link":"https:\/\/codeinsightacademy.com\/blog\/python\/django-restframework-cheat-sheet\/","title":{"rendered":"Django REST framework Cheat Sheet"},"content":{"rendered":"\n<p><a href=\"https:\/\/codeinsightacademy.com\/blog\/?s=django\"><\/a><a href=\"https:\/\/codeinsightacademy.com\/blog\/python\/django-cheat-sheet\/\">Django Cheat Sheet (codeinsightacademy.com)<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip3 install djangorestframework\npython3 manage.py startapp employee\nNote: Make sure your sql service is running.<\/code><\/pre>\n\n\n\n<p>settings.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>INSTALLED_APPS = &#91;\n    'django.contrib.admin',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n    'webpage',\n    'rest_framework',\n    'employee',\n]<\/code><\/pre>\n\n\n\n<p>employee\/models.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from django.db import models\n\nclass Employee(models.Model):\n    post = models.CharField(max_length = 100)\n    name = models.CharField(max_length = 100)\n    salary = models.IntegerField()\n    is_active = models.BooleanField(default=False)\n    added_date = models.DateField(auto_created=True)\n    updated_date = models.DateField(auto_now=True)\n\n    def __str___(self):\n        return self.title<\/code><\/pre>\n\n\n\n<p>to make and apply the migrations run<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/manage.py makemigrations\n.\/manage.py migrate<\/code><\/pre>\n\n\n\n<p>employee\/serializers.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from rest_framework import serializers\nfrom employee.models import Employee\n\nclass EmployeeSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Employee\n        fields = \"__all__\"<\/code><\/pre>\n\n\n\n<p>employee\/views.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from django.shortcuts import render\nfrom rest_framework.generics import ListAPIView\nfrom rest_framework.generics import CreateAPIView\nfrom rest_framework.generics import DestroyAPIView\nfrom rest_framework.generics import UpdateAPIView\nfrom employee.serializers import EmployeeSerializer\nfrom employee.models import Employee\n\nclass ListEmpAPIView(ListAPIView):\n    queryset = Employee.objects.all()\n    serializer_class = EmployeeSerializer\n\nclass CreateEmpAPIView(CreateAPIView):\n    queryset = Employee.objects.all()\n    serializer_class = EmployeeSerializer\n\nclass UpdateEmpAPIView(UpdateAPIView):\n    queryset = Employee.objects.all()\n    serializer_class = EmployeeSerializer\n\nclass DeleteEmpAPIView(DestroyAPIView):\n    queryset = Employee.objects.all()\n    serializer_class = EmployeeSerializer<\/code><\/pre>\n\n\n\n<p>employee\/urls.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from django.urls import path\nfrom employee import views\n\nurlpatterns = &#91;\n    path(\"\",views.ListEmpAPIView.as_view(),name=\"employee_list\"),\n    path(\"create\/\", views.CreateEmpAPIView.as_view(),name=\"employee_create\"),\n    path(\"update\/&lt;int:pk&gt;\/\",views.UpdateEmpAPIView.as_view(),name=\"update_employee\"),\n    path(\"delete\/&lt;int:pk&gt;\/\",views.DeleteEmpAPIView.as_view(),name=\"delete_employee\")\n]<\/code><\/pre>\n\n\n\n<p>main urls.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>urlpatterns = &#91;\npath('admin\/', admin.site.urls),\npath('api\/v1\/employee\/',include(\"employee.urls\"))\n]<\/code><\/pre>\n\n\n\n<p>Run the api in postman with urls<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST request : http:\/\/localhost:8000\/api\/v1\/employee\/create\/ \nGET request : http:\/\/localhost:8000\/api\/v1\/employee\nUPDATE request : http:\/\/localhost:8000\/api\/v1\/employee\/update\/1\/ \nDELETE request : http:\/\/localhost:8000\/api\/v1\/employee\/delete\/1\/ <\/code><\/pre>\n\n\n\n<h2># views.py<br># Single-file DRF example for Node.js + Express developers<br># Covers: create API, DB model usage, custom decorator, JWT auth<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\n\nfrom functools import wraps\nimport jwt\n\nfrom django.conf import settings\nfrom django.contrib.auth.models import User\nfrom django.http import JsonResponse\nfrom rest_framework.decorators import api_view\nfrom rest_framework.response import Response\nfrom rest_framework import status\n\n\n# =========================\n# Express middleware equivalent\n# =========================\ndef jwt_required(view_func):\n    @wraps(view_func)\n    def wrapper(request, *args, **kwargs):\n        auth_header = request.headers.get(\"Authorization\")\n        if not auth_header:\n            return JsonResponse({\"error\": \"Token missing\"}, status=401)\n\n        try:\n            token = auth_header.split(\" \")&#91;1]\n            payload = jwt.decode(token, settings.SECRET_KEY, algorithms=&#91;\"HS256\"])\n            request.user_id = payload&#91;\"user_id\"]\n        except Exception as e:\n            return JsonResponse({\"error\": f\"Invalid token: {str(e)}\"}, status=401)\n\n        return view_func(request, *args, **kwargs)\n\n    return wrapper\n\n\n# =========================\n# Basic create API\n# Express: app.get('\/hi')\n# =========================\n@api_view(&#91;\"GET\"])\ndef hi(request):\n    return Response({\"message\": \"Hi from DRF\"})\n\n\n# =========================\n# Create user API\n# Express: app.post('\/users')\n# =========================\n@api_view(&#91;\"POST\"])\ndef create_user(request):\n    name = request.data.get(\"name\")\n    email = request.data.get(\"email\")\n    password = request.data.get(\"password\")\n\n    if not all(&#91;name, email, password]):\n        return Response({\"error\": \"All fields required\"}, status=400)\n\n    user = User.objects.create_user(\n        username=email,\n        first_name=name,\n        email=email,\n        password=password,\n    )\n\n    return Response(\n        {\n            \"message\": \"User created\",\n            \"id\": user.id,\n            \"email\": user.email,\n        },\n        status=status.HTTP_201_CREATED,\n    )\n\n\n# =========================\n# Login + JWT generation\n# Express: jwt.sign()\n# =========================\n@api_view(&#91;\"POST\"])\ndef login(request):\n    email = request.data.get(\"email\")\n    password = request.data.get(\"password\")\n\n    try:\n        user = User.objects.get(email=email)\n    except User.DoesNotExist:\n        return Response({\"error\": \"User not found\"}, status=404)\n\n    if not user.check_password(password):\n        return Response({\"error\": \"Invalid password\"}, status=401)\n\n    token = jwt.encode({\"user_id\": user.id}, settings.SECRET_KEY, algorithm=\"HS256\")\n\n    return Response({\"token\": token})\n\n\n# =========================\n# Protected route\n# Express: app.get('\/profile', authMiddleware)\n# =========================\n@api_view(&#91;\"GET\"])\n@jwt_required\ndef profile(request):\n    user = User.objects.get(id=request.user_id)\n\n    return Response(\n        {\n            \"id\": user.id,\n            \"name\": user.first_name,\n            \"email\": user.email,\n        }\n    )\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Django Cheat Sheet (codeinsightacademy.com) settings.py employee\/models.py to make and apply the migrations run employee\/serializers.py employee\/views.py employee\/urls.py main urls.py Run the api in postman with urls # views.py# Single-file DRF example for Node.js + Express developers# Covers: create API, DB model usage, custom decorator, JWT auth<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/posts\/1206"}],"collection":[{"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/comments?post=1206"}],"version-history":[{"count":8,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/posts\/1206\/revisions"}],"predecessor-version":[{"id":2971,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/posts\/1206\/revisions\/2971"}],"wp:attachment":[{"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/media?parent=1206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/categories?post=1206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codeinsightacademy.com\/blog\/wp-json\/wp\/v2\/tags?post=1206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}