Coder Social home page Coder Social logo

django-rest's Introduction

REST API built with Django REST framework

For this app, we combine Django (a free, open source framework based on Python) with an REST API (representational state transfer API).

The combination takes places through the Django REST framework (DRF) toolkit.

Since Django utilizes a Model-View-Template (MVT) architectural pattern, the toolkit is able to use the class-based views.

The outcome is a fully functional CRUD Django REST API.

Endpoints

Endpoints define the structure and usage for the GET, POST, PUT, and DELETE HTTP methods within an RESTful API.

This app uses two endpoints:

Endpoint GET POST PUT DELETE View
todos/api 1. List All: List all to-dos for requested user 2. Create: Add a new to-do N/A N/A TodoListApiView
todos/api/<int:todo_id> 3. Retrieve: Get a to-do with given todo_id N/A 4. Update: Update a to-do with given todo_id 5. Delete: Delete a to-do with given todo_id TodoDetailApiView

These endpoints can simply be accessed via their specific urls e.g.: http://127.0.0.1:8000/todos/api/

List

http://127.0.0.1:8000/todos/api/2

List

However, this code also feaures the possibility to submit a new entry via a form submission.

The form is located here: http://127.0.0.1:8000/

The associated view is contact which renders a from for the todo model and checks if it is valid.

Form

The @login_required decorators ensures that only a logged in user can access the form. The logged in user is then automatically associated with the user's submitted task.

Model serializer

The conversion of an Model object into an API-usable format (e.g. JSON) is done via a serializer. The Django REST framework does this via the ModelSerializer class (see serializers.py).

Using the Fetch Api with Django Rest Framework

For the purpose of demonstrating the usage of the fetch API in connection with our endpoints, I have integrated a JavaScript (script.js).

Acquire csrf token

First we need to acquire our csrf token (as decribed in the documentaion):

// Acquiring the csrf token
function getCookie(name) {
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        const cookies = document.cookie.split(';');
        for (let i = 0; i < cookies.length; i++) {
            const cookie = cookies[i].trim();
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
const csrftoken = getCookie('csrftoken');

Fetch data from api using JavaScript

Afterwards we fetch data from our api endpoint:

// Example of fetching data from our api
fetch("/todos/api/1/", {
    method: "get",
    headers: {
        "X-CSRFToken": getCookie("csrftoken"),
        "Accept": "application/json",
        "Content-Type": "application/json"
    },
}).then(function(response) {
    return response.json();
}).then(function(data) {
    console.log("Data is ok", data); // log data to console
}).catch(function(ex) {
    console.log("parsing failed", ex); // log error to console
});

Since I have implemented the script in the contact.html header, we get the following log within our console if we visit http://127.0.0.1:8000/:

Fetch Api

If we compare this to what we get with our api endpoint (http://127.0.0.1:8000/todos/api/1/) we see that they are identical:

Detail Api

Source

The code is based on tutorials:

django-rest's People

Contributors

mynameiscarsten avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.