Curso
Django es un framework de desarrollo web gratuito, de código abierto y de alto nivel ampliamente utilizado. Proporciona muchas funciones a los desarrolladores "listas para usar", por lo que el desarrollo puede ser rápido. Sin embargo, los sitios web construidos a partir de él son seguros, escalables y mantenibles al mismo tiempo.
Objetivo
El objetivo de este tutorial es construir una aplicación de blog en la que se pueda crear y actualizar el contenido del blog a través de un panel de administración. Los contenidos del blog se muestran en la página y se pueden eliminar si es necesario. La aplicación en general proporciona funcionalidad CRUD (Crear, Leer, Actualizar, Eliminar).
Este tutorial no utiliza ninguna tecnología FrontEnd como Javascript, CSS, etc., sino que se centra en conceptos básicos pero esenciales que son necesarios en todo Desarrollo Web Django.
Configuración necesaria
- Git Bash: Lo pueden utilizar usuarios de todos los sistemas operativos. Todos los comandos relacionados con Django y los comandos Unix se realizan a través de él. Para descargar el Git bash: Haz clic en mí.
- Text-Editor: Se puede utilizar cualquier editor de texto, como Sublime Text o Visual Studio Code. Para el siguiente proyecto se utiliza Sublime Text.
- Python 3: La última versión de Python puede descargarse en Descargar Python.
Nota: Puedes seguir fácilmente este tutorial si tienes nociones básicas de Python y conoces los bucles, funciones, clases, etc., y algunos conocimientos de bash o línea de comandos.
Entorno virtual
El Entorno Virtual actúa como dependencias de los proyectos relacionados con Python. Funciona como un contenedor autónomo o un entorno aislado donde se instalan todos los paquetes relacionados con Python y las versiones necesarias relacionadas con un proyecto concreto. Dado que las nuevas versiones de Python, Django, o paquetes, etc. se irán desplegando, con la ayuda de un Entorno Virtual, puedes trabajar con versiones anteriores que sean específicas para tu proyecto. En resumen, puedes iniciar un proyecto independiente relacionado con Django de la versión 2.0, mientras que otro proyecto independiente relacionado con Django de la versión 3.0 puede iniciarse en el mismo ordenador.
Nota: Hay muchas formas de crear un Entorno Virtual, pero a continuación se muestra sólo una de ellas.
Pasos para crear un entorno virtual
- Puedes crear el nuevo directorio llamado 'proyecto-blog' utilizando el comando 'mkdir' en tu Escritorio.
-
Cambia el directorio a 'proyecto-blog' utilizando el comando 'cd'.

-
El entorno virtual se crea utilizando 'python -m venv env', donde env es nuestro entorno virtual mostrado por el comando 'ls'.

-
Para Activar tu Entorno Virtual: El Entorno Virtual se puede activar utilizando el comando "fuente", donde hay que habilitar o activar la carpeta "Scripts".
torno
Se mostrará "env" entre paréntesis si has activado correctamente tu Entorno Virtual. - Instalación de Django: Puedes utilizar 'pip install django' para instalar Django en tu Entorno Virtual específico.

Nota: Los usuarios de Linux y Mac necesitan utilizar "python3" específicamente en el comando porque Python de la versión 2 ya está preinstalado en su ordenador. Además, es preferible utilizar la versión 3 a partir de ahora, ya que Python ya no admite la versión 2 después del año 2020.
Crear un proyecto Django
- El primer paso es crear tu proyecto utilizando el comando 'django-admin startproject
project_name', donde 'nombre_proyecto' es 'django_blog' en tu caso. Además, generará un montón de archivos dentro de nuestro proyecto recién creado, que puedes investigar más a fondo en la documentación de Django si es necesario.
- Cambia el directorio al proyecto recién creado utilizando el comando 'cd' y para ver el archivo creado utiliza el comando 'ls'.

- Puedes ejecutar tu proyecto utilizando 'python manage.py runserver'.

- Puedes ver el proyecto en tu navegador favorito (Google Chrome, Mozilla Firefox, etc.). Puedes entrar en tu navegador y escribir "localhost:8000" o "127.0.0.1:8000" en la URL, como se muestra a continuación.

Nota: Para obtener la misma página que arriba, el servidor en el bash tiene que estar ejecutándose en segundo plano. También puedes detener manualmente el servidor si es necesario pulsando "Ctr+C" en Windows/Linux y "Cmd+C" en Mac.
Iniciar el nuevo proyecto Django
Para crear un nuevo proyecto en Django, siempre es un proceso de dos pasos, que se muestra a continuación.
- El primer paso es crear una aplicación utilizando el comando 'python manage.py startapp
app_name', donde app_name es 'blog' en tu caso. En Django, hay muchas aplicaciones para un único proyecto, donde cada aplicación sirve como una funcionalidad única y específica para el proyecto en particular.
- El segundo paso es hacer que nuestro proyecto se entere de nuestra app recién creada haciendo cambios en la sección INSTALLED_APP de 'django_blog/settings.py'.

Cambios en nuestros modelos
Django utiliza 'SQLite' como base de datos por defecto, que es ligera y sólo se utiliza para proyectos pequeños, lo que está bien para este proyecto. Utiliza 'Object Relational Mapper(ORM)' que facilita mucho el trabajo con la base de datos. El código real de la base de datos no se escribe, mientras que las tablas de la base de datos se crean con la ayuda de la palabra clave "class" en "models.py".
Dentro de 'blog/models.py', tienes que crear un nuevo modelo llamado 'Post'. Se trata de una clase que después se convertirá en una tabla de la base de datos y que actualmente hereda de 'models.Model'. Como en un blog estándar, un determinado 'Post' contiene un título, que será un campo llamado CharField. Es una columna basada en texto y acepta como argumento obligatorio "max_length", que resulta ser 50 en tu caso. Además, hay otro campo llamado 'contenido', que es el TextField, que contiene el texto detallado del 'Post' como en un blog estándar. Se define el método doble guión bajo('str'), que anula el campo 'título' y devuelve el nombre del 'título' real en lugar de algunos objetos. 
Hacer una migración
'python manage.py makemigrations' es un proceso de primer paso que lee el 'models.py' tras su creación. Crea una nueva carpeta llamada 'migraciones' donde hay un archivo llamado '0001_initial.py', que son portables a través de la base de datos. 
Migrar a la base de datos
Este es el segundo paso, en el que 'python manage.py migrate' lee la carpeta recién creada 'migrations' y crea la base de datos, y la evoluciona cuando se produce un cambio en el modelo. 
Registrarse en el admin
Vayamos a 'blog/admin.py' y hagamos una importación de los modelos llamados 'Post' utilizando 'from .models import Post'. Para registrar modelos en el admin, el comando es 'admin.site.register(Post)'.

Creación de SuperUser y Visualización en el panel de Administración
Necesitas crear un SuperUsuario antes de acceder al panel "admin". Para ello, utiliza 'winpty python manage.py createsuperuser'. 
Nota: winpty es un comando específico de bashque se utiliza para comunicarse con los Programas de Consola de Windows.
Ejecuta tu servidor en segundo plano en bash mediante el comando python manage.py runserver. Dirígete al navegador y escribe lo siguiente en la URL. 
Rellena después tus datos, es decir, el nombre de usuario y la contraseña que has creado antes: 
Visualiza después tu panel de administración con nuestros modelos 'Post' recién creados. 
Cambia el contenido del 'Post' haciendo clic en el botón 'Añadir'. Rellena la información y "Guarda" el detalle. 
Cambio en vistas y urls
Desplázate a 'blog/views.py' y realiza los cambios que se muestran a continuación. Añade la función 'blog_list', que recibe la petición. Se realiza una consulta que obtiene todos los objetos creados mediante 'Post.objects.all()' y los guarda en el post. Hay un diccionario recién creado como 'contexto' donde se puede pasar el objeto como clave y obtenerlo a través de la plantilla 'blog-list.html', lo que se hace devolviendo la respuesta con la ayuda de render. 
Crea un nuevo archivo llamado 'urls.py' en 'django_blog/blog' y añade los siguientes cambios. Hay una importación relativa a las vistas 'blog_list' también una 'urlpatterns', que es una lista de la ruta a una página concreta del sitio web. Actualmente, la <b'ruta' contiene la cadena vacía y el nombre de la vista. 
Vamos a 'django_blog/urls.py' e importamos include y hacemos un cambio en 'urlpatterns'. A continuación, añade la ruta a las URL de tu aplicación mediante include. Además, cuando los usuarios se dirigen a través de 'posts/' entonces, se dirige a nuestro 'blog.urls'.
Hacer y cambiar las plantillas
Vamos a crear una carpeta de plantillas que generalmente contiene el 'HTML' y contiene su propio lenguaje de plantillas llamado ' Jinja2'.La carpeta debe llamarse 'templates/blog/blog_list.html', que es la convención. 
A continuación puedes ver la sintaxis relacionada con el 'HyperTextMarkup Language(HTML) donde 'h1' para el titular grande y una lista desordenada(ul) con el elemento de lista li. Además, se utiliza la sintaxis de bucle 'for' relacionada con 'Jinja 2' donde se itera sobre un objeto llamado 'blog_list' pasado como clave desde 'blog/views.py' con cada elemento llamado 'list'. 
Visualiza el "título" denominado "Primera publicación" en la página web. 
Vamos a añadir otra información desde el panel de administración igual que la anterior y nombrar el título de tu segundo post como 'Segundo Post'. 
Después de añadir la información y recargar la página de inicio, la información se actualizará. 
Detalles de cada puesto individual
Crearás cada página individual con información sobre el título del post y su contenido. La 'url' será "localhost:8000/posts/'id'" donde id indica el número único o clave primaria adjunta a cada 'Post' dada por el propio Django.
Vamos a crear una función como 'blog_detail' en 'blog/view.py' , que acepta id como parámetro. Además, hay una consulta hecha para obtener sólo un id específico y guardarlo en 'each_post'. Del mismo modo que en el caso anterior, la información necesaria se pasa como contexto al "blog_detail.html". 
Se cambia la url en 'blog/urls.py' donde path contiene el '', que acepta el id único en forma de entero. Supongamos que el usuario llega a 'posts/' y entonces ve todos los posts, pero cuando llega a 'posts/1', sólo ve la información relativa al primer post creado. 
Vamos a crear un nuevo archivo, 'blog/blog_detail.html', y a realizar los siguientes cambios. Como blog_detail se pasa como contexto, se puede acceder al "título" y al "contenido" utilizando la notación de puntos. 
Dirígete a la URL de tu navegador y escribe lo mismo para obtener entradas individuales. Puesto que el "id" de la primera información creada es "1", la segunda información debe ser "2" y así sucesivamente para las nuevas informaciones creadas. 
Borrar la publicación
Definamos el blog_delete, que recibe la petición y el id. Además, se realiza una consulta donde 'Post.objects.get(id=id)' obtiene el objeto con un id único y lo guarda en each_post. Después se llama a 'each_post.delete()' para borrar el 'Post'.Finalmente se importa HttpResponseRedirect desde el módulo 'django.http' donde se utiliza para redirigir la página al '/posts/' 
. En 'urls.py' importa 'blog_delete' y la ruta se establece en '<id>/delete' donde el id con delete al final eliminará ese objeto o información en concreto. 
Vamos a borrar nuestro post escribiendo lo siguiente en el 'urls.py'. 
Por fin, la página se redirige a '/posts' cuando se llama a 'posts/1/delete/' donde sólo existe un post en la página de inicio. 
Conclusión
¡Enhorabuena por terminar el tutorial! Has aprendido los fundamentos del Desarrollo Web Django y conoces la funcionalidad CRUD. Además, para obtener más detalles sobre un tema concreto, consulta la Documentación de Django.
Referencias:
Preguntas frecuentes sobre el desarrollo web Django en Python
¿Qué es Django?
Django es un framework web gratuito y de código abierto escrito en Python que sigue el patrón arquitectónico modelo-plantilla-vista. Está diseñado para ayudar a los desarrolladores a llevar las aplicaciones desde el concepto hasta su finalización lo más rápidamente posible.
¿Cuáles son algunas características de Django?
Algunas características de Django incluyen un diseño ligero y modular, un potente ORM (Object-Relational Mapper) que simplifica las interacciones con la base de datos, y soporte integrado para tareas comunes de desarrollo web, como la autenticación y gestión de usuarios, el manejo de formularios y la administración de contenidos.
¿Cómo empiezo con Django?
Para empezar con Django, necesitarás instalar Python y la biblioteca Django en tu máquina. A continuación, puedes crear un nuevo proyecto Django utilizando el comando django-admin startproject y empezar a construir tu aplicación utilizando las funciones y herramientas incorporadas de Django.
¿Cómo creo una base de datos en Django?
Django utiliza por defecto el motor de base de datos SQLite, que se incluye con Python. Puedes crear una nueva base de datos definiendo modelos en tu aplicación Django y ejecutando el comando migrate. Esto creará las tablas necesarias en la base de datos para almacenar los datos de tus modelos.
¿Cómo puedo crear vistas y plantillas en Django?
En Django, las vistas son funciones que gestionan peticiones HTTP y devuelven respuestas HTTP. Puedes crear vistas definiendo funciones en tu aplicación Django que reciban una petición y devuelvan una respuesta. Las plantillas son archivos HTML que contienen marcadores de posición para contenido dinámico. Puedes utilizar el lenguaje de plantillas de Django para insertar contenido dinámico en las plantillas y renderizarlo en tus vistas.
¿Cómo despliego una aplicación Django?
Hay varias formas de desplegar una aplicación Django, dependiendo de tus necesidades y preferencias de alojamiento. Algunas opciones comunes incluyen el despliegue en una plataforma en la nube como Heroku o AWS, utilizando un servidor web como Apache o Nginx, o utilizando un servicio de alojamiento como PythonAnywhere o DigitalOcean.

