Introducción
Bienvenido al desarrollo backend con Python
¿Qué es Django?
Comenzando a programar en Django
Instalación de Django
Explorando los archivos que creó Django
El servidor de desarrollo
Nuestro primer proyecto: Premios Platzi App
Nuestro primer proyecto: Premios Platzi App 2
Ajustando el archivo settings.py
Models
¿Qué es ORM? ¿Qué es un modelo?
Creando un diagrama entidad-relación para nuestro proyecto
Creando los modelos Question y Choice
Interactive Shell
La consola interactiva de Django
El método __str__
Filtrando los objetos creados desde la consola interactiva
El método filter
Accediendo al conjunto de respuestas
Django Admin
El administrador de Django
Views
¿Qué son las views o vistas?
Creando vistas para la aplicación
Templates de Django
Creando el template del home
Elevando el error 404
Utilizando la etiqueta url para evitar el hard coding
Forms
Formularios: lo básico
Creando la vista vote
Creando la vista results
Generic Views
Generic Views
Implementando generic views en la aplicación
Conclusiones
Aprendiste mucho, pero, ¿estás listo para pasar al siguiente nivel?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 17
Preguntas 7
Personalizar Error 404 puedes hacer lo siguiente:
En settings,py debes modificar lo siguiente:
DEBUG = False
ALLOWED_HOSTS = ['*']
Y el archivo debe ir dentro de polls/templates/404,html
Esta muy interesante la manera de hacer consultas
En los templates no se le colocan los () al queryset
Porque así es la sintaxis de django para hacer los templates.
Se puede hacer el queryset desde la vista si se desea:
question = Question.objects.get(pk=question_id)
choices = question.choice_set.all()
O como lo hizo el profesor desde el template:
{% for choice in question.choice_set.all %}
Permitiendo Minimixar lineas de código.
Aunque no lo quería, a medida que avanzo en aprendizaje busco la manera de escribir menos lineas posibles.
Nunca pares de aprender.
Exitos codeando 😉
La verdad que Django es una delicia para programar, tiene la simplicidad de Python para programar y entender el código. Pero a su vez un montón de funcionalidades de una comunidad tan activa y con lo cual puedes hacer casi todo. Me encanta este framework es lo que estaba buscando para mis herramientas de desarrollo.
Http Status Code:
Este es un tema muy interesante acerca de los shortcut functions de Django, en este documento cortico encontrarán toda la información valiosa para entender el funcionamiento más a profundidad, espero sea de ayuda.
Allí se tratan 4 puntos importantes:
Documentación: Django shortcut functions
La forma de hacerlo sin el shorcut podria ser así:
from django.http import Http404
def detail(request, question_id):
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
raise Http404()
Aclaracion:
Este approach funciona cuando tenemos definido un template espacifico para errores 404 (404.html), si DEBUG=False en el config. py entonces Django va a mostrar este template cada vez que elevemos el error asi como lo hice yo. Tambien puedes hacerlo de la siguiente manera
return HttpResponseNotFound('<h1> not found </h1>')
de esta forma puedes definir el html a retrnar directamente en la response.
Mas detalles en la doc de Django
Ahora, se crea un template para cada vez que se quiera ver el detalle de una pregunta en el archivo templates/polls/detail.html
<h1>{{question.question_text}}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>
De igual forma se tiene que configurar la llamada del template en las vistas:
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, "polls/detail.html",{
"question": question
} )
La funcion get_object_or_404
es usada para devolver un error 404 si no se encuentra el objeto.
Todos mis apuntes en mi gitHub
Muy buena está clase
HTTP Responses:
si no hay respuesta, salta un comentario "no hay
{% if question.choice_set.all %}
<h1>{{question.question_text}}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{choice.Choices_text}}</li>
{% endfor %}
</ul>
{% else %}
<p> <h1>{{question.question_text}}</h1></p>
<p> no hay</p>
{% endif %}
"
Si no encuentra respuestas simplemente se pone una condicion:
<h1>{{question.question_text}}</h1>
<ul>
{% if question.question_choices.all %}
{% for choice in question.question_choices.all %}
<li>{{choice.choice_text}}</li>
{% endfor %}
{% else %}
<p>No choices for this question</p>
{% endif %}
</ul>
Nice
https://developer.mozilla.org/es/docs/Web/HTTP/Status
Respuestas informativas (100–199),
Respuestas satisfactorias (200–299),
Redirecciones (300–399),
Errores de los clientes (400–499),
y errores de los servidores (500–599).
Los códigos de estado se definen en la sección 10 de RFC 2616. Puedes obtener las especificaciones actualizadas en RFC 7231.
Fuente:developer.mozilla.org/
Tipar los parámetros ayuda al autocompletado 😄
from django.http import HttpRequest
def detail(request: HttpRequest, question_id: int):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {
'question': question
})
Excelente y muy sencillo!!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.