






Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Los mejores documentos en venta realizados por estudiantes que han terminado sus estudios
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Descubre las mejores universidades de tu país según los usuarios de Docsity
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
apuntes python djangoapuntes python djangoapuntes python djangoapuntes python djangoapuntes python djangoapuntes python django
Tipo: Apuntes
1 / 11
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
La clase abstracta no es una tabla de la base de datos, solo sirve como base para otras clases Convención para comentar se conoce como Doc String y se emplea con (“”” “””) Primero ser conciso y precioso, que hace la función Segundo que significan los parámetros, nombre del parámetro que son y que esperamos de ellos. Escribir comentario antes de comenzar el código para obligarte a pensar que hará la función. def fibonacci(n): if n == 0 or n == 1: return 1 return fibonacci(n - 1) + fibonacci(n - 2) función recursiva fibonacci Funciones en expresiones Una forma de definir una función en una expresión es utilizando el keyword lambda. lambda tiene la siguiente sintaxis: lambda
sumar(2, 3) 5 Funciones en estructuras de datos Las funciones también se pueden incluir en diversas estructuras que las permiten almacenar. Por ejemplo, una lista puede guardar diversas funciones a aplicar o un diccionario las puede almacenar como valores. def aplicar_operaciones(num): operaciones = [abs, float] resultado = [] for operacion in operaciones: resultado.append(operacion(num)) return resultado aplicar_operaciones(-2) [2, -2.0] Como pudimos ver, las funciones son objetos muy versátiles que nos permiten tratarlas de diversas maneras y que nos permiten añadir capas adicionales de abstracción a nuestro programa. Las tuplas son inmutables Se puede desempaquetar tuplas Is es un operador lógico ************* Con id puedo saber si es el mismo objeto por el numero en memoria donde este apunta C = list(a) para clonar una lista Encuentra los sospechosos comunes quienes son? Pasaste los argumentos en un orden incorrecto. Escribiste un nombre de manera errónea en lugar de escribir suma. Con ese escribiste suma. Conceda o escribiste sumó, etcétera, etcétera.
correremos nuestro proyecto de Django usando Gunicorn. Los archivos estáticos y subidos por los usuarios serán también servidos usando NGINX ya que no es trabajo de Django realizar estas tareas. La base de datos no tiene que estar disponible para el público por lo que no hay necesidad de que NGINX la exponga. Conectar bases de datos con Django Django obtiene la estructura, acceso y control de los datos de una aplicación a través de su ORM (Object Relational Mapper), esto significa que no importa qué motor de base de datos esté usando, el mismo código seguirá funcionando, configurar esto en un proyecto de Django es cuestión de segundos. Todo se define dentro del archivo settings.py de nuestro proyecto dentro de la variable DATABASES: DATABASE Será el nodo padre que nos servirá para indicar que definiremos una base de datos. Dentro, tendremos el nodo default este tendrá toda la configuración clave de la base de datos. datos para conexión de base de datos django.png Además, Django puede trabajar con múltiples bases de datos usando una estrategia llamada routers por lo que el diccionario DATABASES puede contener múltiples llaves con diferentes bases de datos. Pero eso sí, necesita siempre existir una llave “default”. Es un diccionario de python el cual requiere definir una base de datos por default, más de eso al final, usando la llave default que a su vez será otro diccionario con los datos de configuración: La configuración recibirá el engine el cual puede ser: PostgreSQL: 'django.db.backends.postgresql’ MySQL: 'django.db.backends.mysql’ SQLite: 'django.db.backends.sqlite3’
Oracle: 'Django.db.backends.oracle’ El nombre de la base de datos “NAME”. El usuario “USER”. La contraseña “PASSWORD”. La ubicación o host del servidor de la base de datos “HOST”. Y el puerto de conexión “PORT”. Adicionalmente, se pueden configurar más detalles por base de datos, por ejemplo, configurar que todos los queries de una vista sean empaquetados en una sola transacción a la base de datos usando ATOMIC_REQUESTS=True Buena practica! Es una buena práctica al conectarnos por primera vez a nuestro servidor actualizar los paquetes del Sistema Operativo con los siguientes comandos: sudo apt-get update && sudo apt-get upgrade Configuración inicial del servidor Creamos un nuevo usuario sin directorio home que tenga la capacidad de correr algunos comandos de súper usuario: sudo useradd -g sudo -M
Ir al folder del proyecto: cd platzi Instalar dependencias de python del proyecto: pip install -r requirements/prod.txt Agregar algunas variables de entorno al archivo ~/.bashrc para probar localmente que todo esté funcionando: vim ~/.bashrc Las variables deben lucir algo similar a lo siguiente: export PLATZI_SECRET_KEY="random_key:aasdafasf" export PLATZI_DB_NAME="platzi" export PLATZI_DB_USER="freddier" export PLATZI_DB_PASSWORD="cvander<3" export PLATZI_DB_PORT="5432" export PLATZI_DB_HOST="localhost" export DJANGO_SETTINGS_MODULE="platzi.settings.prod" Leemos las variables: source ~/.bashrc Editamos la variable **ALLOWED_HOSTS **del archivo de settings de producción: vim platzi/settings/prod.py La variable tendrá algo como lo siguiente, donde gatos.io será tu dominio o IP: ALLOWED_HOSTS = [’gatos.io’] Hacer un Sanity Check
Hasta este punto el proyecto debe ser capaz de escribir a la base de datos además de servirse usando el servidor de desarrollo y gunicorn. Probémoslo: Reflejar el modelo de Django en PostgreSQL: ./manage.py migrate Crear un súper usuario: ./manage.py createsuperuser Correr servidor de desarrollo: ./manage.py runserver 0.0.0.0: Correr gunicorn: gunicorn platzi.wsgi -b 0.0.0.0: Si todo funcionó correctamente, los pasos 3 y 4 debieron mostrar tu sitio en la URL o IP en el puerto 8000. Configurar Nginx Iniciar sesión como súper usuario: sudo su - Ir al directorio de Nginx: cd /etc/nginx/ Borrar los antiguos archivos de configuración: rm sites-*/default Crear un nuevo archivo vim sites-available/app con el siguiente contenido: upstream django_app { server 127.0.0.1:8000; } server { listen 80; server_name demo.gatos.io; access_log /var/log/nginx/app.log; error_log /var/log/nginx/app.error.log; location /static { autoindex on; alias /home/platzi/platzi/staticfiles/;
GROUP=sudo NUM_WORKERS= DJANGO_WSGI_MODULE=platzi.wsgi echo "Starting $NAME as whoami
" cd $VIRTUALENV source bin/activate cd $DJANGODIR export PLATZI_SECRET_KEY="&wrw__y!3_hlh@&1v)a!%=ext=-7zuqewv+#^qu^63g)a(3f3@" export PLATZI_DB_NAME="platzi" export PLATZI_DB_USER="cvander" export PLATZI_DB_PASSWORD="adminadmin123" export PLATZI_DB_PORT="5432" export PLATZI_DB_HOST="localhost" export DJANGO_SETTINGS_MODULE="platzi.settings.prod" export PYTHONPATH=$DJANGODIR:$PYTHONPATH exec gunicorn ${DJANGO_WSGI_MODULE}
--workers $NUM_WORKERS
--user=$USER --group=$GROUP
--log-level=debug
--bind=127.0.0.1: Hacer el script ejecutable: chmod +x deploy/gunicorn_start Probar el script: deploy/gunicorn_start
Mientras el script esté corriendo, el proyecto estará viviendo en la IP en el puerto 80. Crear un servicio Iniciar sesión como súper usuario: sudo su - Ir al directorio de los servicios: cd /etc/init Crear el servicio vim platzi.conf con el siguiente contenido:
start on startup script exec /home/platzi/deploy/gunicorn_start end script Iniciar servicio: service platzi start Por último regresamos al directorio que contiene el proyecto y ejecutamos: ./manage.py collectstatic