Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducción a Django

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Introducción a Django

Conceptos básicos para entender Django, modelos, vistas, rutas.

Avatar for José Aguirre

José Aguirre

March 03, 2017

More Decks by José Aguirre

Other Decks in Technology

Transcript

  1. Python 3.6 no se lleva bien con Windows y hace

    que pip deje de funcionar adecuadamente para esto deberemos de seguir estos sencillos pasos 1. Desinstala la versión de pip de tu entorno virtual: 2. python -m pip uninstall pip setuptools 3. Descarga el código y nombrar el archivo get-pip.py de https://bootstrap.pypa.io/get-pip.py 4. Ejecuta el script get-pip: 5. python get-pip.py
  2. Muy probablemente si estas usando PyCharm no detecte el django-admin.py

    de manera global para esto debemos de ejecutar el siguiente código en nuestra terminal con el entorno virtual activado. (entorno_virtual) $ python RUTA_DEL_ENVS\Scripts\django-admin.py startproject NOMBRE_PROYECTO
  3. Django fue desarrollado para una página de noticias Diseñado para

    hacer las tareas comunes del desarrollo web rápidas y fáciles
  4. Django viene con un mapeador de objeto-relacional a través del

    cual podemos describir la estructura de la base datos en código python. Django también provee una API (funciones y clases) para poder interactuar con los datos
  5. from django.db import models class Reporter(models.Model): full_name = models.CharField(max_length=70) def

    __str__(self): # __unicode__ on Python 2 return self.full_name class Article(models.Model): pub_date = models.DateField() headline = models.CharField(max_length=200) content = models.TextField() reporter = models.ForeignKey(Reporter) def __str__(self): # __unicode__ on Python 2 return self.headline Modelos en Django
  6. Django fue desarrollado para una página de noticias Diseñado para

    hacer las tareas comunes del desarrollo web rápidas y fáciles
  7. Para decirle a Django que hemos realizado cambios en nuestros

    modelos y quisiéramos registrar cambios en una migración usamos el comando: $ python manage.py makemigration model
  8. Cada vez que definamos la estructura en la base Django

    necesitamos correr una utilidad que transforma nuestro código en tablas de la base de datos $ python manage.py migrate
  9. • La salida exacta varía de acuerdo a la base

    de datos que se esté usando. • Los nombres de las tablas se generan automáticamente combinando el nombre de la app (polls) con el nombre, en minúsculas del modelo – question y choice (se puede modificar este comportamientos). • Las claves primarias (IDs) se agregan automáticamente (esto también se puede modificar). • Por convención, Django añade "_id" al nombre del campo de clave foránea (sí, se puede modificar esto también). Consideraciones al usar las migraciones de Django
  10. • La relación de clave foránea se hace explícita mediante

    un constraint FOREIGN KEY. No te preocupes por la parte del DEFERRABLE; indica a PostgreSQL no forzar la clave foránea hasta el final de la transacción. • Se ajusta a la base de datos que se esté usando, y entonces los tipos de campos específicos de la base de datos como auto_increment (MySQL), serial (PostgreSQL), o integer primary key(SQLite) se manejan por uno automáticamente. Lo mismo aplica para los nombres de los campos – e.g., el uso de comillas dobles o simples. • El comando sqlmigrate no corre la migración en la base de datos - solamente imprime por pantalla para mostrar cuál es el SQL que Django piensa es requerido. Es útil para chequear lo que Django va a hacer o si uno tiene administradores de base de datos que requieren el SQL para aplicar los cambios. Consideraciones al usar las migraciones de Django
  11. Para poder hacer uso de nuestros modelos podemos usar la

    terminal de django y jugar: $ python manage.py shell
  12. Para hacer más fácil el desarrollo al usar modelos podemos

    usar una librería llamada Django Extensions, que brinda una colección de funcionalidades que podemos usar con manage.py $ python manage.py shell_plus $ pip install django-extensions Al instalarlo podemos usar, un comando que permite usar el shell con carga a todos los modelos de nuestra app
  13. Una vez que tengamos nuestros modelos definidos, Django crear automáticamente

    una interfaz de administración profesional, lista para trabajarse.
  14. #sitio/app/models.py from django.db import models class Article(models.Model): pub_date = models.DateField()

    headline = models.CharField(max_length=200) content = models.TextField() reporter = models.ForeignKey(Reporter) Modelo en Django
  15. $ python manage.py createsuperuser $ python manage.py runserver Para crear

    un usuario con privilegios usaremos la utilidad Corremos la aplicación
  16. Django ofrece un esquema de URLs limpio y elegante que

    genera un detalle muy importante al realizar web de calidad Para el diseño de las URLs, hay que crear un módulo Python llamado URLConf. Es una tabla de contenidos para tu app, contiene un mapeo entre patrones URL y funciones de Python
  17. #sitio/app/urls.py from django.conf.urls import url from . import views urlpatterns

    = [ url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ] from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), ]
  18. from django.conf.urls import include, url from django.contrib import admin urlpatterns

    = [ url(r'^polls/', include('polls.urls')), url(r'^admin/', include(admin.site.urls)), ]
  19. El código mapea URLs, listadas como expresiones regulares simples a

    la ubicación de funciones python de vistas. Las expresiones regulares permiten capturar valores en las URLs cuando un usuario pide una página, Django recorre los patrones hasta dar con uno, sino, manda a llamar una vista especial para un 404.
  20. Las views en Django son responsable de hacer una de

    dos cosas: devolver un objeto HttpResponse con el contenido de la página solicitada, o levantar una excepción como Http404 Datos que recibe en base a los parámetros Carga un template Renderiza los datos
  21. #site/app/views.py from django.shortcuts import render from .models import Article def

    year_archive(request, year): a_list = Article.objects.filter(pub_date__year=year) context = {'year': year, 'article_list': a_list} return render(request, 'news/year_archive.html', context) from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")
  22. Django tiene un path de búsqueda de templates, que permite

    minimizar la redundancia. En settings, especifica una lista de directorios para revisar en DIRS. Si tu template existe en el primer directorio, se busca en el segundo directorio así sucesivamente. {% extends "base.html" %} {% block title %}Articles for {{ year }}{% endblock %} {% block content %} <h1>Articles for {{ year }}</h1> {% for article in article_list %} <p>{{ article.headline }}</p> <p>By {{ article.reporter.full_name }}</p> <p>Published {{ article.pub_date|date:"F j, Y" }}</p> {% endfor %} {% endblock %}
  23. {% load staticfiles %} <html> <head> <title>{% block title %}{%

    endblock %}</title> </head> <body> <img src="{% static "images/sitelogo.png" %}" alt="Logo" /> {% block content %}{% endblock %} </body> </html>