Este es el cookbook de Instalación & Setup Inicial para DJANGO REST FRAMEWORK:
Usar como Referencia el siguiente Git-Hub con el Repo del Proyecto de Ejemplo: Hay diferentes ramas, conforme se fueron agregando features También hay diferentes commits, por lo cual hay tener cuidado con el código ya que hay variaciones Crear directorio vacio con un nombre que identifique el proyecto o la app hacer los updates de linux con sudo apt Generar el ambiente virtual con: tambien puede ser virtualenv <folder_name> | <nombre_entorno> después encendemos el entorno source <nombre_entorno>/bin/activate ej. source env/bin/activate | source mypython/bin/activate Hacer las instalaciones através de PIP (PIP3 preferencia) Sirve validar las actualizaciones, sino generarlas muchas veces necesita actulizarse ubuntu para encontrar las paqueterias más actualizadas pip install -U pip setuptools wheel Muchas veces es necesario actualizar el PIP para tener las paqueterias más recientes Si no se tiene el archivo requirements.txt: pip3 install djangorestframework pip3 install psycopg2-binary pip3 install django-cors-headers pip3 install django-filter pip3 install python-dotenv y así sucesivamente para las demás Si se cuenta con el archivo requirements.txt asi se debe instalar pip3 install -r /path/to/requirements.txt Es muy importante usar -r porque muchas veces no lo ejecuta sin la r Si NO se cuenta con el archivo requirements.txt se puede generar así pip freeze > requirements.txt Entrar a requirements.txt y validar que se transfiera solo lo necesario De lo contrario borrarlo ya que son dependencias que se intalaran nuevamente en automático Este es el requirements.txt (primeras 5 son esenciales) minimo necesario djangorestframework==3.12.4 psycopg2==2.9.1 → si se instalo la versión binaria, hay que hacerlo asi: pip3 install psycopg2-binary → usar este comando de forma manual django-cors-headers==3.7.0 generar el proyecto desde django-admin django-admin startproject <nombre_proyecto> ej. django-admin startproject dogtor y genera un directorio “dogtor” al mismo nivel que el de venv Crear el super usuario para Django: username, email & password después crear el archivo requirements.txt $ pip freeze > requirements.txt (con esto se vacia lo que contenga pip en el archivo de manera automática, solo linux/wsl2) a excepción de que ya contemos con él seria direccionarlo como sigue: pip3 install -r /path/to/requirements.txt | pip3 install -r requirements.txt Se genera el git init para ya irlo sincronizando al repo se inicializa a la altura de y requirements.txt Generar nuestro archivo .gitignore este es el link de referencia para django: En general con DBEaver como visualizador y validador Pero para el arranque hacemos lo siguiente através de DBeaver y al menos un usuario admin dando click sobre la base de datos, botón derecho y en el menú create role esto es para que django se pueda authenticar dentro de la DB y puedas usarla En caso de tener un problema con dicho usuario, generar con DBEaver un superuser y actualizar las credenciales en los .env Si es con Terminal usar psql pero en otra terminal diferente y fuera del ambiente virtual de python, esto para poder ingresar a los comandos de postgresql → (1:07:00 de la grabación) $ \l → lista las bases de datos $ CREATE DATABASE <database_name>; $ \l → lista las bases de datos $ \du → lista todos los usuarios en el servidor $ CREATE USER admin WITH PASSWORD ‘12345’; → (con comillas simples) cuando se crea no se genera con ningún atributo de superuser o admin $ CREATE ROLE (to be confirmed) Al final Asegurar que el servidor de postgresql esta corriendo sino se puede validar asi: sudo service postgresql start sudo service postgresql restart systemctl status postgresql → te da el estado del server Si no funciona con psql → usar sudo su postgres → y entras a la terminal de igual manera a la altura de abrir el vscode y generar el archivo .env ingresar las variables de entorno que necesitamos DJANGO_SECRET_KEY= puede usar este link: para generar el hash DM_NAME=<db_name_in_postgresql> TIP → formatter autopep8 → select option “use black” Agregar la libreria de python que maneja las variables de ambiente esto con ayuda de la libreria os → import os from dotenv import load_dotenv y para usarlo con os.getenv(”NOMBRE_VARIABLE”) Configurar los settings básicos en y desde .env traer las respectivas variables para: siendo la primera vez que se configura se puede usar este link: CORS_ORIGIN_ALLOW_ALL = true CORS_ALLOWED_ORIGINS = ["http://localhost:5500"] → para hacer pruebas locales → Nota especial, este debe quedar lo más arriba posible de este siguiente middleware → este debe de estar más abajo que el CORS Este normalmente no se encuentra, este hay que adicionarlo una vez que necesitamos agregar parametros extas, como los de Authentication Si todo esta bien, generar las migraciones: si aplica todas las migraciones entonces todo esta correcto esto porque django ya trae migraciones ocultas de modelos de usuarios, permisos, etc. se puede usar python shell para interactuar directamente con el ORM de Django correr el server validar que todo ok: localhost:8000 | 127.0.0.1:8000 localhost:8000/admin/ para entrar a la consola del admin y validar permisos del usuario que acabamos de crear python startapp <nombre_app> registrarlo en settings en el area de apps el <nombre_app> validarlo que se creo en la base de datos después registrarlo en admin.py de la app después re-arrancar el server entrar al 172.0.0.1:8000/admin y podemos interactuar
TIPs:
related_name tiene que ser el plural de la clase tanto one to many como para many to many django funciona con mixings y multiherencia
SETTINGS:
SECRET_KEY = os.getenv("DJANGO_SECRET_KEY")
DEBUG = bool(os.getenv("DJANGO_DEBUG", True))
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": os.getenv("DB_NAME"),
"USER": os.getenv("DB_USER"),
"PASSWORD": os.getenv("DB_PASSWORD"),
"HOST": os.getenv("DB_HOST"),
"PORT": os.getenv("DB_PORT"),
}
}
.ENV:
DJANGO_SECRET_KEY=El hash lo puedes crear en este link → DJANGO_DEBUG=True
DB_NAME=<database_name>
DB_USER=<user_name>
DB_PASSWORD=<custom_password>
DB_HOST=localhost
DB_PORT=5432
REST FRAMEWORK
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework.authentication.TokenAuthentication",
),
}
from django.contrib import admin
from .models import Pet, PetOwner
admin.site.register(Pet)
admin.site.register(PetOwner)