Implementación Django de API REST con django-rest-framework.
Go to file
devfzn a36f93289f
init Django Rest Framework Api course
Inicio de projecto Django 'drf_course' y app 'core'
2023-03-29 14:06:11 -03:00
backend init Django Rest Framework Api course 2023-03-29 14:06:11 -03:00
.gitignore init Django Rest Framework Api course 2023-03-29 14:06:11 -03:00
env.template init Django Rest Framework Api course 2023-03-29 14:06:11 -03:00
README.md init Django Rest Framework Api course 2023-03-29 14:06:11 -03:00

Django REST API

Django Rest Framework

Requerimientos Rest Framework

  • Python (>=3.10)
  • Django

Optional:

  • PyYAML, uritemplate: Schema generation support.
  • Markdown: Markdown support for the browsable API.
  • Pygments: Add syntax highlighting to Markdown processing.
  • django-filter: Filtering support.
  • django-guardian: Object level permissions support.

En entorno virtual

pip install djangorestframework

Instalacion

pip install django-extensions djangorestframework djangorestframework-jsonapi \
inflection python-dotenv sqlparse

Django utiliza SQLite3 por defecto facilitar el desarrolo, en este proyecto se
utliza MariaDB, pero es opcional.

# MariaDB
pip install mysqlclient

Inicio del proyecto

mkdir backend

# Creación del proyecto Django
django-admin startproject drf_course backend

Este proyecto consta de 2 aplicaciones.

La primera es el núcleo. Esta contendrá la lógica del contacto con el endpoint. La segunda será ecommerce. Esta contendrá la ĺógica del endpoint de los items y ordenes.

cd backend
python manage.py startapp core

Editar configuración del proyecto

Archivo ./backend/drf_course/settings.py.

Importar .env usando python-dotenv.

from dotenv import load_dotenv
import os

load_dotenv()

Reemplazar ALLOWED_HOSTS, SECRET_KEY y DEBUG.

SECRET_KEY = os.environ.get("SECRET_KEY")
DEBUG = int(os.environ.get("DEBUG", default=0))
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS").split(" ")

Añadir aplicaciones

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_extensions', # <---
    'django_filters', # <---
    'rest_framework', # <---
    'core', # <---
]

Añadir variables del framework REST al final del arhivo.

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler',
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework_json_api.parsers.JSONParser',
        ),
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework_json_api.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
        ),
    'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
    'DEFAULT_FILTER_BACKENDS': (
        'rest_framework_json_api.filters.QueryParameterValidationFilter',
        'rest_framework_json_api.filters.OrderingFilter',
        'rest_framework_json_api.django_filters.DjangoFilterBackend',
        'rest_framework_json_api.filters.SearchFilter',
        ),
    'SEARCH_PARAM': 'filter[search]',
    'TEST_REQUEST_RENDERER_CLASSES': (
        'rest_framework_json_api.renderers.JSONRenderer',
        ),
    'TEST_REQUEST_DEFAULT_FORMAT': 'vnd.api+json'
}

En caso de utilizar MariaDB, cambiar la declaración de DATABASES, para usar las variables de entorno declaradas en ./backend/env

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get("MARIADB_DBASE"),
        'USER': os.environ.get("MARIADB_USER"),
        'PASSWORD': os.environ.get("MARIADB_PASS"),
        'HOST': os.environ.get("MARIADB_HOST"),
        'PORT': os.environ.get("MARIADB_PORT"),
    }
}

Modificar ./backend/drf_course/urls.py

from django.contrib import admin
from django.urls import path
from rest_framework import routers

router = routers.DefaultRouter()

urlpatterns = router.urls

urlpatterns += [
    path('admin/', admin.site.urls),
]