Pasos para La Creación de Django
Pasos para La Creación de Django
Pasos para La Creación de Django
2. Seleccionar intérprete:
2.1 ctrl + shift + p
2.2 seleccionar versión de python recomendada
2.3 Después abrir una nueva terminal de CMD
“Si te sale el (.venv) se creó de forma exitosa”
2.2 En caso de que no aparezca:
2.2.1 Usaremos la terminal para acceder a los scripts del entorno
virtual, entramos al entorno con cd .venv o “nombredelentorno”
2.2.2 Después, entramos a la carpeta Scripts con: “cd Scripts”
2.2.3 Por último, solo escribimos “actívate”, y debería de aparecer
(.venv) y la dirección de las carpetas.
NOTA: Algunas veces no saldrá, porque depende mucho de como esta acomodada las
carpetas dentro de nuestro proyecto, por lo que recomendaría abrir en el visual solo
la carpeta que tiene el entorno virtual creado. Por ejemplo:
Tenemos una carpeta “Practicas”, y dentro tenemos 2 mas “DJANGO” y “FLASK”, al
abrir con visual code, puede tener conflictos, porque no encontrara fácilmente el
entorno. Así que la recomendación seria abrir en visual directamente la carpeta del
proyecto en este caso “DJANGO” para facilita el proceso.
4. Instalar Psycopg2
4.1 python -m pip install psycopg2.
8. Correr el servidor:
8.1 python manage.py runserver
"default": {
# "ENGINE": "django.db.backends.sqlite3",
# "NAME": BASE_DIR / "db.sqlite3",
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": "postgres",
"USER": "postgres",
"PASSWORD": "19100209",
"HOST": "localhost",
"PORT": "5432",
}
11. Verificar que se hayan creado las tablas en la base datos o bien en
pg admin
#Para verificar en la página de administración de django:
11.1 Dentro de la carpeta del proyecto, en la terminal
11.1.2 Crear un super usuario:
python manage.py createsuperuser
11.1.3 Pedira un username
11.1.4 un email
11.1.5 Contraseña
11.1.6 confirmación de la contraseña
12. Ejecutar el servidor con python manage.py runserver
12.1 Verificamos que si podamos iniciar sesion ejecutando el servidor y en la
barra de direcciones agregamos "/admin"
Persona/models.py
class Domicilio(models.Model):
calle = models.CharField(max_length=255)
no_calle = models.IntegerField()
pais = models.CharField(max_length=255)
Persona/admin.py
e
16.2 Ahora creamos una solicitud de migración con:
python manage.py makemigrations
<h1>Lista de personas</h1>
<table>
<thead>
<tr>
<td>ID</td>
<td>Nombre</td>
<td>Email</td>
</tr>
<tbody>
<!--El bloque de abajo es para agregar codigo de python, algo
parecido como con php -->
{% for persona in personas %}
<tr>
<td>{{persona.id}}</td>
<td>{{persona.nombre}} {{persona.apellido}}</td>
<td>{{persona.emai}}</td>
</tr>
{%endfor%}
</tbody>
</thead>
</table>
17. Ya creado los documentos, tenemos que referenciarlos para poder
visualizarlos, ahora vamos al archivo 'urls.py' y agregamos el archivo:
from webapp.views import index, indexPersona NOTA: En el archivo urls, es donde
manejaremos las rutas:
Path () : Es el método que redigira a la
urlpatterns = [
dirección que recibe 2 argumentes, la
path("admin/”, admin.site.urls), dirección y el método a ejecutar.
webapp/views.py
NOTA: en el archivo views, van a ir las funciones que tendrá nuestra pagina:
1. El modelo Persona para realizar una consulta a la base de datos. La función objects
proporciona un administrador de consultas que permite interactuar con la base de datos.
order_by("id") ordena los resultados por el campo id en orden ascendente.
2. Esta es la parte donde se devuelve la respuesta HTTP. En este caso, se está utilizando la
función render para renderizar una plantilla HTML llamada "IndexPersona.html". Toma 3
argumentos:
request: Es el objeto de solicitud HTTP que se ha pasado a la vista.
"IndexPersona.html": Es el nombre de la plantilla que se va a renderizar. Django buscará esta
plantilla en los directorios de plantillas configurados en tu proyecto.
{"personas": personas}: Es un diccionario que contiene datos que se pasan a la plantilla. En este
caso, se está pasando un diccionario con una clave "personas" y el valor es la lista de personas
que se obtuvo de la consulta a la base de datos.
18. En la carpeta persona Se crea el archivo forms donde agregamos el
siguiente formulario que se creara automático:
persona/forms.py
# Vistas
20. En el archivo views de la app Personas
20.1 Antes hay que crear un archivo html llamado Agregar que es donde
cargara el archivo generado
# Función para agregar una nueva persona
def nuevaPersona(request):
1. if request.method == "POST":
2. formapersona = PersonaForm(request.POST)
3. if formapersona.is_valid():
4. formapersona.save()
5. return redirect("ListadoPersonas")
else:
formapersona = PersonaForm()
6. return render(request, "Agregar.html", {"formapersona": formapersona})
NOTA:
1. Verifica que tipo de solicitud es.
2. Se crea un objeto en base a la forma creada usando los datos recibidos mediante el post y request.
3. is_valid() es un método proporcionado por ModelForm en Django que comprueba si los datos
proporcionados son válidos según las reglas de validación del modelo.
4. save() es un método que se proporciona automáticamente a los formularios basados en modelos.
5. Después de guardar la instancia, la vista redirige al usuario a la vista llamada ListadoPersonas.
21. Ya creado
6. Se renderiza y referenciado,
la plantilla ahora vamos
llamada "Agregar.html" y se al archivo
pasa de urlsformapersona
el formulario para como
agregar
contexto. Estolasignifica
dirección:
que en la plantilla se podrá acceder al formulario con el nombre
formapersona.
NOTA: En el archivo urls, es donde
manejaremos las rutas:
Path () : Es el método que redigira a la
urlpatterns = [
dirección que recibe 2 argumentos, la
path("admin/", admin.site.urls), dirección y el método a ejecutar.
NOTA:
1. Se utiliza la función get_object_or_404 para intentar recuperar un objeto del modelo Persona
cuyo id coincida con el valor proporcionado en la URL.
2. persona.delete(): Si se encontró un objeto de Persona, se utiliza el método delete() para
eliminarla de la base de datos.
3. Después de eliminar la instancia, redirige al usuario a la vista llamada ListadoPersonas.
23.3 DetallePersona.html:
{%extends "layout.html"%}
{% block body %}
<div class="container mt-5">
<h1 class="display-4">Detalle Personajes: 1.{{personaje.nombre}}</h1>
<tr>
NOTA:
<td>{{ 2. personaje.id }}</td>
1. Recibe el parámetro persona desde el método de
<td>{{ personaje.nombre }}</td> views y accede a su atributo nombre.
2. Agrega el campo id del objeto recibido para
<td>{{ personaje.vida }}</td>
mostrarlo en una tabla
<td>{{ personaje.rol }}</td> 3. Lo mismo con los siguientes campos.
<td>{{personaje.poder}}</td>
</tr>
<a class="btn btn-primary" href="{% url 'ListadoPersonajes' %}">Regresar</a>
</div>
{% endblock %}
24. Ahora, en index persona, agregar unas celdas vacías para agregar
los diferentes botones de accion para el crud:
{%extends "layout.html"%}
{%block body%}
<div>
<h1>Lista de personas</h1> <a href="nuevapersona">Agregar</a>
<table border="1">
<thead>
<tr>
<td>ID</td>
<td>Nombre</td>
<td>Email</td>
<td></td> <td></td> <td></td> </tr>
<tbody>
<!--El bloque de abajo es para agregar codigo de python,parecido como con php -->
{% for persona in personas %}
<tr>
<td>{{persona.id}}</td>
<td>{{persona.nombre}} {{persona.apellido}}</td>
<td>{{persona.email}}</td>
<td><a href="editarPersona/{{persona.id}}">Editar</a></td>
<td><a href="detallePersona/{{persona.id}}">Detalle</a></td>
<td><a href="EliminarPersona/{{persona.id}}">Eliminar</a></td>
</tr>
{%endfor%}
</tbody>
</thead> </table> </div> {%endblock%}
Quedaria de la forma anterior el index persona
25. Para la funcionalidad de los botones, nos vamos al archivo views
para agregar las funciones correspondientes de cada accion:
La manera final del view.py quedaría de la siguiente manera:
from django.shortcuts import render, redirect, get_object_or_404
from persona.models import Persona
from persona.forms import PersonaForm
# Agregar una nueva persona
def nuevaPersona(request):
if request.method == "POST":
formapersona = PersonaForm(request.POST)
if formapersona.is_valid():
formapersona.save()
return redirect("ListadoPersonas")
else:
formapersona = PersonaForm()
return render(request, "Agregar.html", {"formapersona": formapersona})
# ConsultarPersonas
def DetallePersona(request, id):
persona = get_object_or_404(Persona, pk=id)
return render(request, "detallePersona.html", {"persona": persona})
Esto dependiendo de cada uno se agregará los estilos o imágenes que siempre van a
aparecer
28. En caso de querer utilizar las imagenes o algun otro recurso fijo, se crea una
carpeta llamada "static" que ahí se guardaran estos archivos,
por ejemplo ahí cargamos una imagen que sera mostrada en cada una de las
páginas, pero para eso tenemos que modificar los diferentes HTML agregando 2
etiquetas, al final quedarian de la siguiente manera los htmls:
28. 1. Agregar.html:
{%extends "layout.html"%}
{%block body%}
<div>
<form method="post">
<h1>Agregar Persona</h1>
<table>
<div>
{{formapersona}}
</div>
</table>
<div >
<input type="submit" value="submit">
</div>
{% csrf_token %}
</form>
</div>
{%endblock%}
28.2 .detallePersona.html:
{%extends "layout.html"%}
{%block body%}
<div>
<h1>
{{persona.id}}
{{persona.nombre}}
{{persona.apellido}}
{{persona.email}}
</h1>
<a href="{% url 'ListadoPersonas' %}"> Regresar </a>
</div>
{%endblock%}
28.3. indexPersona.html:
{%extends "layout.html"%}
{%block body%}
<div>
<h1>Lista de personas</h1>
<a href="nuevapersona">Agregar</a>
<table border="1">
<thead>
<tr>
<td>ID</td>
<td>Nombre</td>
<td>Email</td>
<td></td>
<td></td>
<td></td>
</tr>
<tbody>
<!--El bloque de abajo es para agregar codigo de python, algo parecido
como con php -->
{% for persona in personas %}
<tr>
<td>{{persona.id}}</td>
<td>{{persona.nombre}} {{persona.apellido}}</td>
<td>{{persona.email}}</td>
<td><a href="editarPersona/{{persona.id}}">Editar</a></td>
<td><a href="detallePersona/{{persona.id}}">Detalle</a></td>
<td><a href="EliminarPersona/{{persona.id}}">Eliminar</a></td>
</tr>
{%endfor%}
</tbody>
</thead>
</table>
</div>
{%endblock%}
28.4. editarPersona.html:
{%extends "layout.html"%}
{%block body%}
<div>
<form method="post">
<h1>Editar Persona</h1>
<table>
<div>
{{formapersona}}
</div>
</table>
<div >
<input type="submit" value="submit">
</div>
{% csrf_token %}
</form>
</div>
{%endblock%}