{"id":25287581,"url":"https://github.com/mrshakil015/rest-api-using-django","last_synced_at":"2026-04-27T20:33:15.373Z","repository":{"id":242802283,"uuid":"727053756","full_name":"mrshakil015/REST-API-using-Django","owner":"mrshakil015","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-17T14:21:46.000Z","size":17662,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T17:15:17.666Z","etag":null,"topics":["class-based-views","django","model-serializer","python","rest-framework","serializer"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrshakil015.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-04T04:48:42.000Z","updated_at":"2025-01-17T14:21:48.000Z","dependencies_parsed_at":"2025-02-12T23:01:31.672Z","dependency_job_id":null,"html_url":"https://github.com/mrshakil015/REST-API-using-Django","commit_stats":null,"previous_names":["mrshakil015/rest-api","mrshakil015/rest-api-using-django"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mrshakil015/REST-API-using-Django","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrshakil015%2FREST-API-using-Django","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrshakil015%2FREST-API-using-Django/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrshakil015%2FREST-API-using-Django/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrshakil015%2FREST-API-using-Django/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrshakil015","download_url":"https://codeload.github.com/mrshakil015/REST-API-using-Django/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrshakil015%2FREST-API-using-Django/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32354567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"ssl_error","status_checked_at":"2026-04-27T20:07:00.910Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["class-based-views","django","model-serializer","python","rest-framework","serializer"],"created_at":"2025-02-12T22:50:52.497Z","updated_at":"2026-04-27T20:33:15.356Z","avatar_url":"https://github.com/mrshakil015.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Django REST-API\n\n\u003cdetails\u003e\n\u003csummary\u003eStart with REST API\u003c/summary\u003e\n\n## What is Serializer?\nSerializer allow complex data such as querysets and model instances to be converted to natvie python datatypes that can then be easily rendered into JSON, XML or other content types.\n\n## API Create\n+ Create and Activate Environment\n    ```text\n    python-m venv env\n\n    .\\env\\Scripts\\activate\n    ```\n+ Install requirted packages:\n    ```python\n    pip install django\n    pip install djangorestframework\n    ```\n+ Set up a new Django application.\n    ```python\n    django-admin startproject restApiProject  \n    cd restApiProject\n    django-admin startapp restApiApp\n    ```\n+ Update `settings.py` to Add `rest_framework` and `app name` to INSTALLED_APPS:\n    ```python\n    INSTALLED_APPS = [\n    ......\n    ......\n    'rest_framework',\n    'restApiApp',\n    ]\n    ```\n+ Create models into `models.py` script:\n    ```python\n    class ModelName(models.Model):\n        teacher_name = models.CharField(max_length=30, null=True)\n        course_name = models.CharField(max_length=50, null =True)\n        course_duration = models.IntegerField(null=True)\n        seat = models.IntegerField(null=True)\n\n    ```\n+ Regsiter model into the `admin.py`:\n    ```python\n    @admin.register(ApiModel)\n    class ApiModelAdmin(admin.ModelAdmin):\n        list_display=['id','teacher_name','course_name','course_duration','seat']\n    ```\n+ Include the urls into the `urls.py`\n    ```python\n    from django.urls import path, include\n    urlpatterns = [\n        .......\n        .......\n        path('api-auth/', include('rest_framework.urls')),\n    ]\n    ```\n+ After that create a serializer script file under the app like: `serializer.py`:\n    ```python\n    from rest_framework import serializers\n\n    class ApiModelSerializer(serializers.Serializer):\n        teacher_name = serializers.CharField(max_length=30)\n        course_name = serializers.CharField(max_length=50)\n        course_duration = serializers.IntegerField()\n        seat = serializers.IntegerField()\n    ```\n### Access All data from model:\n+ At first, create a view function:\n    ```python\n    from django.shortcuts import render, HttpResponse\n    from .models import *\n    from .serializers import *\n    from rest_framework.renderers import JSONRenderer\n    #----Qyeryset--------\n    def apimodel_info(request):\n        #---complex data\n        apidata = ApiModel.objects.all()\n        #---python dict\n        serializer = ApiModelSerializer(apidata, many=True)\n        #---render Json\n        json_data = JSONRenderer().render(serializer.data)\n        #----Json sent to user\n        return HttpResponse(json_data, content_type='application/json')\n    ```\n    + `ApiModelSerializer(apidata, many=True)` creates a serializer instance that converts the queryset `apidata` into a Python data structure (like a list of dictionaries). The `many=True` argument indicates that multiple objects are being serialized.\n    + `JSONRenderer().render(serializer.data)` converts the serialized data (a Python dict) into a JSON-formatted string. The result is stored in `json_data`.\n    + `HttpResponse(json_data, content_type='application/json')` creates an HTTP response with the JSON data and specifies that the content type is `'application/json'`. This response is returned to the client (user).\n+ Include Urls:\n    ```python\n    ..........\n    ..........\n    path('apiinfo/',views.apimodel_info),\n    ..........\n    ```\n+ Then run the project. After run the project we can view all data as json format.\n\n### View single instance:\n+ At first, create a view function:\n    ```python\n    def apimodel_instance(request,pk):\n        #---complex data\n        apidata = ApiModel.objects.get(id=pk)\n        #---python dict\n        serializer = ApiModelSerializer(apidata)\n        #---render Json\n        json_data = JSONRenderer().render(serializer.data)\n        #----Json sent to user\n        return HttpResponse(json_data, content_type='application/json')\n    ```\n### Access data from third pary app:\n```python\nimport requests\n\n#---allocate url\n\nURL = \"http://127.0.0.1:8000/apiinfo/\"\n\n#-----get url data\nresponse = requests.get(url=URL)\n#---extract into json\ndata = response.json()\nprint(data)\n```\n\n\n## What is DeSerializer?\n- The process of converting native python datatypes such as dictionaries to complex data types such as querysets is called deserializer in DRF.\n- Serializers also provide deserialization, allowing parsed data to be convertd back into complex types, after first validating the incoming data.\n\n### Insert/Create data into model from third party app:\n+ Create a function under the serializer class into `serializer.py` script:\n    ```python\n    class ApiModelSerializer(serializers.Serializer):\n        ...........\n        ...........\n        def create(self, validated_data):\n            return ApiModel.objects.create(**validated_data)\n    ```\n+ Create a view function into the `views.py`:\n    ```python\n    from django.views.decorators.csrf import csrf_exempt\n    import io\n    from rest_framework.parsers import JSONParser\n    @csrf_exempt\n    def apidata_create(request):\n        if request.method == 'POST':\n            json_data = request.body\n            #json to stream convert\n            stream = io.BytesIO(json_data)\n            #stream to python\n            pythondata = JSONParser().parse(stream)\n            #python to complex\n            serializer = ApiModelSerializer(data=pythondata)\n            if serializer.is_valid():\n                serializer.save()\n                res = {'msg':'Successfully insert data'}\n                json_data = JSONRenderer().render(res)\n                return HttpResponse(json_data, content_type='application/json')\n            json_data = JSONRenderer().render(serializer.errors)\n            return HttpResponse(json_data, content_type ='application.json')\n    ```\n+ Create urls:\n    ```python\n    ..............\n    ..............\n    path('apicreate/',views.apidata_create, name='apicreate'),\n    ..............\n    ```\n+ Create a python script `create.py` outside the project like a third party app insert the data:\n    ```python\n    import requests, json\n\n    URL = \"http://127.0.0.1:8000/apicreate/\"\n\n    data = {\n        'teacher_name': 'Rohim',\n        'course_name': 'Deep Learning',\n        'course_duration': 3,\n        'seat': 20,\n    }\n\n    json_data = json.dumps(data)\n    re = requests.post(url=URL, data = json_data)\n    data = re.json()\n    print(data)\n    ```\n\n### Update model data from third party app:\n+ Create a function under the serializer class into `serializer.py` script:\n    ```python\n    class ApiModelSerializer(serializers.Serializer):\n        ...........\n        ...........\n        def update(self, instance, validated_data):\n            instance.teacher_name = validated_data.get('teacher_name', instance.teacher_name)\n            instance.course_name = validated_data.get('course_name', instance.course_name)\n            instance.course_duration = validated_data.get('course_duration', instance.course_duration)\n            instance.seat = validated_data.get('seat', instance.seat)\n            \n            instance.save()\n            return instance\n    ```\n+ Create a view function into the `views.py` without create new function we can include `PUT` method code under the `POST` method function:\n    ```python\n    from django.views.decorators.csrf import csrf_exempt\n    import io\n    from rest_framework.parsers import JSONParser\n    @csrf_exempt\n    def apidata_update(request):    \n        if request.method == 'PUT':\n            json_data = request.body\n            #---json to stream\n            stream = io.BytesIO(json_data)\n            #stream to python\n            pythondata = JSONParser().parse(stream)\n            id = pythondata.get('id')\n            apidata = ApiModel.objects.get(id=id)\n            serializer = ApiModelSerializer(apidata, data=pythondata, partial=True)\n            if serializer.is_valid():\n                serializer.save()\n                res = {'msg':'Successfully update data'}\n                json_data = JSONRenderer().render(res)\n                return HttpResponse(json_data, content_type='application/json')\n            json_data = JSONRenderer().render(serializer.errors)\n            return HttpResponse(json_data, content_type ='application.json')\n    ```\n+ Create urls:\n    ```python\n    ..............\n    ..............\n    path('apiupdate/',views.apidata_update, name='apiupdate'),\n    ..............\n    ```\n+ Create a python script `update.py` outside the project like a third party app insert the data:\n    ```python\n    import requests\n    import json\n\n    URL = \"http://127.0.0.1:8000/apiupdate/\"\n\n    data = {\n        'id': 2,\n        'teacher_name': 'Md. Abul',\n        'course_name': 'Web Development',\n    }\n\n    json_data = json.dumps(data)\n    r = requests.put(url=URL, data=json_data)\n    data = r.json()\n    print(data)\n    ```\n\n### Delete model data from third party app:\n+ Create a function into the `views.py` without create new function we can include `DELETE` method code under the `POST/PUT` method function:\n    ```python\n    from django.views.decorators.csrf import csrf_exempt\n    import io\n    from rest_framework.parsers import JSONParser\n    @csrf_exempt\n    def apidata_delete(request):    \n        if request.method == 'DELETE':\n            json_data = request.body\n            print(json_data)\n            #--json to stream\n            stream = io.BytesIO(json_data)\n            #--stream to python\n            pythondata = JSONParser().parse(stream)\n            id = pythondata.get('id')\n            if ApiModel.objects.filter(id=id).exists():\n                apidata = ApiModel.objects.get(id=id)\n                apidata.delete()\n                res = {'msg':'Successfully deleted data'}\n            else:\n                res = {'msg':'Data not found'}\n            json_data = JSONRenderer().render(res)\n            return HttpResponse(json_data, content_type='application.json')\n    ```\n+ Create urls:\n    ```python\n    ..............\n    ..............\n    path('apidelete/',views.apidata_delete, name='apidelete'),\n    ..............\n    ```\n+ Create a python script `delete.py` outside the project like a third party app insert the data:\n    ```python\n    import requests\n    import json\n\n    URL = \"http://127.0.0.1:8000/apidelete/\"\n\n    data = {\n        'id' : 5,\n    }\n    #-----Convert python data into json\n    json_data = json.dumps(data)\n    r = requests.delete(url=URL, data = json_data)\n    #-----extract\n    data = r.json()\n    print(data)\n    ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eRest API follow by documentation\u003c/summary\u003e\n\n## Start With API\n+ Create and Activate Environment\n    ```text\n    python-m venv env\n\n    .\\env\\Scripts\\activate\n    ```\n+ Install requirted packages:\n    ```python\n    pip install django\n    pip install djangorestframework\n    ```\n+ Set up a new Django application.\n    ```python\n    django-admin startproject restApiProject  \n    cd restApiProject\n    django-admin startapp restApiApp\n    ```\n+ Update `settings.py` to Add `rest_framework` and `app name` to INSTALLED_APPS:\n    ```python\n    INSTALLED_APPS = [\n    ......\n    ......\n    'restApiApp',\n    'rest_framework',\n    ]\n    ```\n+ Create a model into the `models.py` files:\n    ```python\n    class studentModel(models.Model):\n        name = models.CharField(max_length=100,null=True)\n        email = models.EmailField(max_length=100,null=True)\n        address = models.CharField(max_length=100,null=True)\n        \n        def __str__(self):\n            return self.name\n    ```\n+ Register the model into `admin.py`:\n    ```python\n    from restApiApp.models import studentModel\n\n    admin.site.register(studentModel)\n    ```\n+ Create a new module named `serializers.py` and create a model `serializer class` under the `restApiApp` that we'll use for our data representations.:\n    ```python\n    from rest_framework import serializers\n    from restApiApp.models import studentModel\n\n    class studentSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = studentModel\n        fields = ['id','name','address','email']\n    ```\n\n## Inspact Serializer Data:\nIf we want we can inspect all the fields in a serializer instance.\n+ Open django shell into the terminal:\n    ```python\n    py manage.py shell\n    ```\n+ Then try the following command:\n    + First import `StudentSerializer` from `serializers.py`:\n        ```python\n        from restApiApp.serializers import StudentSerializer\n        ```\n    + Create a object variable:\n        ```python\n        serializer = StudentSerializer()\n        print(repr(serializer))\n        ```\n\n## Work with Django Shell:\n\n+ Open django shell into the terminal:\n    ```python\n    py manage.py shell\n    ```\n+ Now create object:\n    + import `studentModel` from model:\n        ```python\n        from restApiApp.models import studentModel\n        ```\n    + create objects:\n        ```python\n        obj = studentModel()\n        ```\n    + assign the value into the object:\n        ```python\n        obj.name=\"Md Shakil\"\n        obj.address=\"Dhaka\"\n        obj.email=\"shakil.eub.cse@gmail.com\"\n        ```\n    + save the object:\n        ```python\n        obj.save()   \n        ```\n    + delete object:\n        ```python\n        obj.delete()\n        ```\n\n## Django views using Serializer class into Web:\n\n### View API data using `JsonResponse`:\n+ Edit `views.py` and import required packages:\n    ```python\n    from django.shortcuts import render\n    from django.http import HttpResponse, JsonResponse\n    from django.views.decorators.csrf import csrf_exempt\n    from rest_framework.parsers import JSONParser\n    ```\n+ Import `serializers` and `models` from `restApiApp`:\n    ```python\n    from restApiApp.serializers import StudentSerializer\n    from restApiApp.models import studentModel\n    ```\n+ Create data view function:\n    ```python\n    @csrf_exempt\n    def student_list(request):\n        if request.method == 'GET':\n            objs = studentModel.objects.all()\n            serializer = studentModelSerialize(objs, many=True)\n            return JsonResponse(serializer.data, safe=False)\n    ```\n\n+ Create url into the `urls.py`:\n\n    ```python\n    from django.contrib import admin\n    from django.urls import path\n    from RestApiApp2.views import student_list\n    from RestApiApp2.apiviews import studentModel\n\n    urlpatterns = [\n        path('admin/', admin.site.urls),\n        path('list/',student_list),\n    ]\n    ```\n        \n    + Import `student_list` function from `views.py` and import `studentModel` from `models.py`.\n\n+ Create another data view function for view the individual data using primary key:\n    ```python\n    @csrf_exempt\n    def student_detail(request, pk):\n        try:\n            student = studentModel.objects.get(pk=pk)\n        except studentModel.DoesNotExist:\n            return HttpResponse(status=404)\n\n        if request.method == 'GET':\n            serializer = studentModelSerialize(student)\n            return JsonResponse(serializer.data)\n    ```\n+ Create url into the `urls.py`:\n    ```python\n    ...............\n    ...............\n    from RestApiApp2.views import student_detail\n\n    urlpatterns = [\n        .............\n        .............\n        path('student_detail/\u003cint:pk\u003e/',student_detail),\n    ]\n    ```\n\n\u003c/details\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrshakil015%2Frest-api-using-django","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrshakil015%2Frest-api-using-django","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrshakil015%2Frest-api-using-django/lists"}