Implementación Django de API REST con django-rest-framework.
|
||
---|---|---|
backend | ||
.gitignore | ||
env.template | ||
README.md |
Django REST API
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),
]