Aprendamos cómo exponer una aplicación de demostración de Django en Internet. Eso, sin desplegarlo en un servicio de hosting.
Configurar un entorno de implementación provisional solo para mostrar una demostración de su aplicación Django es horrible. Aún más, si solo necesita una URL durante un par de minutos, para mostrársela a un cliente o compañero de equipo.
La mejor opción es usar una herramienta para exponer su servidor local actual. ¡Exactamente! Las personas de todo el mundo podrán ver lo que sucede en su servidor local.
Para ello, utilizaremos Ngrok. Esta herramienta nos permitirá crear URL públicas en función de los puertos locales de nuestros equipos. Todo esto gracias a la magia de Túneles.
Antes de comenzar todo el código trabajado en este tutorial, estará disponible en este Repositorio Github.
Tabla de contenido
Pre requisitos
Se recomienda conocer todas estas cosas básicas. Aunque es probable que puedas seguir este tutorial, sin más problemas.
Crear una aplicación Django
Para crear un tutorial paso a paso, explicaré el proceso de creación de un proyecto Django. Si ya tienes uno, puedes saltarte esta sección.
Ambiente virtual
En primer lugar, vamos a crear un Entorno virtual Python.
- Así que abra la terminal de su sistema (o shell).
- Si le resulta demasiado complicado abrir la terminal de su sistema, intente utilizar la terminal integrada del editor de código.
- Haga clic en Terminal>Nueva terminal, y debería aparecer un caparazón en la parte inferior de su pantalla.
- Escriba el siguiente comando para crear un entorno virtual, con la herramienta integrada de Python.
python -m venv .venv
Básicamente significa:
Oye, Python, crea un comando de entorno virtual (-m venv) con el nombre de .venv
- Ahora, si enumera los archivos de su directorio actual, debería ver una carpeta .venv.
$ ls -l drwxr-xr-x - daniel 30 abr 23:12 .venv # Other files ...
- Para activar el entorno virtual, llamamos al comando fuente.
source .venv/bin/activate
- Si encuentra algún problema, consulte la siguiente tabla extraída del sitio web oficial. documentación de Python.
Plataforma
Caparazón
Comando para activar entorno virtual
POSIX
golpe/zsh
$ fuente
pez
$ fuente
csh/tcsh
$ fuente
Núcleo de PowerShell
$
ventanas
cmd.exe
C:>
Potencia Shell
PD C:>
Ahora, si ha ejecutado el comando correcto, su shell debería tener el nombre del entorno virtual.
$ source .venv/bin/activate.fish (.venv) $
Instalar Django
Después de activar su entorno virtual, ahora puede instalar la versión de Django que desee. En este caso, es una buena opción instalar la última.
$ pip install django Collecting django Using cached Django-3.2-py3-none-any.whl (7.9 MB) Collecting pytz Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB) Collecting asgiref<4,>=3.3.2 Using cached asgiref-3.3.4-py3-none-any.whl (22 kB) Collecting sqlparse>=0.2.2 Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB) Installing collected packages: pytz, asgiref, sqlparse, django Successfully installed asgiref-3.3.4 django-3.2 pytz-2021.1 sqlparse-0.4.1
Ahora es el momento de crear la estructura básica del proyecto de la aplicación Django que desea exponer.
$ django-admin startproject mytestingproject
Esto creará un proyecto Django con el nombre mytestingproject. Después de crearlo, queremos que ingrese al directorio donde se encuentra la estructura del proyecto. Así que hagamos un cd y ejecutemos el servidor Django.
# Enter to the project directory (.venv)$ cd mytestingproject/ # Listing the files inside the project (.venv) $ ls mytestingproject manage.py
Ahora que está dentro, ejecutemos el servidor Django para ver cómo se ve.
(.venv) $python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. May 01, 2021 - 04:34:25 Django version 3.2, using settings 'mytestingproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Básicamente, Django nos dice que un servidor local se está ejecutando en nuestro host local (127.0.0.1 siempre apunta a él), en el puerto predeterminado, 8000.
No se preocupe por el mensaje de error. Primero, verifiquemos que todo funcione bien en nuestro servidor local. Para hacer eso, vaya a su navegador web y pegue esta dirección:
http://localhost:8000/ # Do you note that localhost and 127.0.0.1 are the same?
Si todo funciona bien, debería ver una hermosa plantilla de Django.
Eso es todo acerca de nuestra instalación de Django.
Ahora vamos a exponer este proyecto de Django. Si está trabajando en un proyecto más complejo, los siguientes métodos para exponer aplicaciones de Django también funcionarán.
Exponiendo una aplicación Django con Ngrok
Como dije antes, Ngrok es una de las herramientas que nos permitirá aterrizar nuestro servidor local en Internet. Así que en primer lugar Descargar Ngrok del sitio web oficial.
Una vez que lo haya instalado, procedamos con los comandos necesarios.
Abra otro shell, manteniendo la terminal que su servidor Django está ejecutando actualmente, y escriba.
$ ngrok help NAME: ngrok - tunnel local ports to public URLs and inspect traffic More commands ....
Esto le dará un vistazo rápido a los comandos disponibles que ofrece Ngrok y también garantizará que el proceso de instalación se realizó correctamente.
Para crear una URL donde las personas puedan acceder a nuestro servidor, ejecutemos.
$ ngrok http 8000
# secure public URL for port 8000 web server
Estamos ejecutando el argumento http para crear una URL que se conectará al puerto 8000 de nuestro servidor local.
Este es el resultado que probablemente obtendrá.
ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 1 hour, 59 minutes Update update available (version 2.3.39, Ctrl-U to update) Version 2.3.35 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://cac2165aa7f8.ngrok.io -> http://localhost:8000 Forwarding https://cac2165aa7f8.ngrok.io -> http://localhost:8000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
Como dice, Ngrok está reenviando esa URL extraña y fea a nuestro servidor local. Pero la magia sucede cuando presionas el navegador con la URL que Ngrok te dio.
Cambio de configuración.py
Wow, ¿qué acaba de pasar 😱?
Parece que Django está arrojando un error debido a una configuración de DisallowedHost. Si verifica el shell en el que está ejecutando el servidor Django y el que tiene la sesión de Ngrok, obtendrá algunos mensajes de depuración.
# Django messages Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. Bad Request: / [01/May/2021 05:07:46] "GET / HTTP/1.1" 400 65196 Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. # Ngrok messages HTTP Requests ------------- GET /favicon.ico 400 Bad Request GET / 400 Bad Request
Como nos dice Django, debemos agregar el dominio que estamos conectando a la variable de configuración ALLOWED_HOSTS. Pero tenemos un problema, y es que el nombre de dominio es demasiado grande y confuso.
Así que cambiemos un poco la configuración de Django, para solucionar este error. Abra el archivo settings.py ubicado en la carpeta del proyecto.
# mytestingproject/settings.py # Line 28 # Change from ALLOWED_HOSTS = [] # To ALLOWED_HOSTS = ["*"]
Si conoce algunas expresiones regulares, puede apreciar que estamos configurando un comodín, donde se permitirán todos los hosts.
Ahora recarga el sitio y mira el resultado.
¡Todo está funcionando perfectamente ahora! Y si comienza a crear aplicaciones para el proyecto y configurar URL y vistas, todo se reflejará en esa URL pública.
Nota: No olvide cambiar ALLOWED_HOSTS en producción, ya que produciría un gran agujero de seguridad.
Conclusiones
En este tutorial, aprendió cómo crear una URL de demostración para su proyecto Django, sin necesidad de implementarlo.
Practicaste cómo iniciar un proyecto de Django y cómo trabajar con el archivo settings.py en Django.
Finalmente, aprendió cómo usar Ngrok y cómo exponer cualquier servidor local con él.
A continuación, explore algunos de los marcos populares de Python para crear API.