introducción a django

35
Introducción a Django Universidade de A Coruña, 21 noviembre 2011 Joaquim Rocha <[email protected]> http://www.joaquimrocha.com

Upload: joaquim-rocha

Post on 19-Jan-2015

1.331 views

Category:

Technology


2 download

DESCRIPTION

This is an introduction to Django that I gave in the University of Coruña. It is the same as I those in English but it's updated with generic views and model forms. Esto es una introducción a Django que di en la Universidade da Coruña. Es la misma que las que tengo en inglés pero actualizada con vistas genéricas y formularios para modelos.

TRANSCRIPT

Page 1: Introducción a Django

Introducción a Django

Universidade de A Coruña, 21 noviembre 2011Joaquim Rocha <[email protected]>

http://www.joaquimrocha.com

Page 2: Introducción a Django

¿Qué es?

"Django is a highlevel Python Web frameworkthat encourages rapid development andclean, pragmatic design."

(de la página oficial de Django)

Page 3: Introducción a Django

¿Qué es?

Proyecto interno de Lawrence Journal-World en 2003

Debería ayudar a los periodistas con sus plazos cortos

No debería molestar a los periodistas

LLeva el nombre del guitarrista Django Reinhardt

Page 4: Introducción a Django

El framework

Object-Relational Mapper (ORM)

Interfaz de Admin automática

Diseño de URLs elegante

Poderoso sistema de plantillas

i18n

Page 5: Introducción a Django

Gran comunidad

Django tiene una gran comunidad y una extensa listade apps Django

Buscalas en http://code.google.com,http://github.com o http://djangopackages.com

Otras páginas web interesantes:

Django Sites: http://www.djangosites.orgDjango People: http://www.djangopeople.orgDjango Community:https://www.djangoproject.com/community

Page 6: Introducción a Django

Poner proyectos en producción

mod_wsgiFastCGImod_python...

Page 7: Introducción a Django

Backend de BD

Soportados oficialmente:

PostreSQLMySQLSQLiteOracle

Page 8: Introducción a Django

Usando a Django

Page 9: Introducción a Django

Instalación

Tan simple como bajar el archivo o clonar el repositorio:http://djangoproject.com/download

Después:# python setup.py install

O entonces:# easy_install install

Page 10: Introducción a Django

Desarrollo

Page 11: Introducción a Django

Creación de un proyecto

$ django-admin.py startproject Project

Project/ __init__.py manage.py settings.py urls.py

Page 12: Introducción a Django

Executar de un proyecto

$ ./manage.py runserver

... y abre en tu navegador: localhost:8000

Page 13: Introducción a Django

Desarrollo

Los proyectos de Django tienen aplicacions (Apps)

Las Apps son los componentes de los proyectos

Page 14: Introducción a Django

Creación de una aplicación

$ ./manage.py startapp my_app

my_app/ __init__.py models.py tests.py views.py

Page 15: Introducción a Django

Construir la base de datos

$ ./manage.py syncdb

Page 16: Introducción a Django

Configuración de un proyecto

Configuración sencilla en el archivo settings.py

Page 17: Introducción a Django

Desarrollo

Django sigue el patrón de diseño MTV

Model-Template-View

Page 18: Introducción a Django

Modelos

Los modelos son classes que representan objetosen la base de datos

¡Y no tendrás que tocar en SQL jamás!

Page 19: Introducción a Django

Modelos

class Post(models.Model):

title = models.CharField(max_length = 500) content = models.TextField() date = models.DateTimeField(auto_now = True) ...

Page 20: Introducción a Django

Vistas

Las vistas son funciones que normalmenteprocesan modelos e renderizan HTML

¡Es donde pasa la magia!

¿Cómo obtener todos los posts desde hace 5 días y ordenarlospor fecha descendente?

Page 21: Introducción a Django

Vistas

import datetime

def view_latest_posts(request): # Last 5 days date = datetime.datetime.now() - datetime.timedelta(5) posts = Post.objects.filter(date__gte = date).order_by('-date') return render_to_response('posts/show_posts.html', {'posts': posts})

Page 22: Introducción a Django

Vistas Genericas

Son vistas todavía más rápidas de usar, paratareas comunes como listar o enseñar objetos.

from django.views.generic import DetailView, ListView

urlpatterns = patterns('Project.posts.views', (r'^view/(?P<pk>d+)/$', DetailView.as_view(model=Post)), (r'^posts/$', ListView.as_view(model=Post)),

Intentan usar los siguientes archivos por defecto:post_detail.html y post_list.html

Page 23: Introducción a Django

Templates

¡Prevendrán que te repitas!

Y los designers no tendrán que tocar el código.

Page 24: Introducción a Django

<html> <head> <title>{% block title %}{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body></html>

Page 25: Introducción a Django

{% extends "base.html" %}{% block title %}Homepage{% endblock %}{% block content %} <h3>This will be some main content</h3> {% for post in posts %} <h4>{{ post.title }} on {{ post.date|date:"B d, Y"|upper }}<h4> <p>{{ post.content }}</p> {% endfor %} {% url project.some_app.views.some_view some arguments %}{% endblock %}

Page 26: Introducción a Django

URLs

En Django, los URLs ¡son parte del diseño!

urls.py usa expresiones regulares para mapear URLs con vistas

Page 27: Introducción a Django

URLs

urlpatterns = patterns('Project.some_app.views', (r'^$', 'index'), (r'^posts/(?P<r_id>d+)/$', 'view_latest_posts'), (r'^create/$', 'create'), url(r'^view/post/(?P<p_id>d+)/$', 'view', name = 'view_post'),)

Page 28: Introducción a Django

Formularios

Son clases que representan un formulario HTML

Dejan que se pueda facilmente configurar lostipos esperados de inputs, mensages de error,etiquetas, etc.

Page 29: Introducción a Django

Formularios

class CreatePost(forms.Form): title = forms.CharField(label = "Post Title", max_length = 500, widget = forms.TextInput(attrs={ 'class': 'big_entry' })) content = forms.CharField() tags = forms.CharField(required = False)

Page 30: Introducción a Django

Formularios

def create_post(request): if request.method == 'POST': form = CreatePost(request.POST) if form.is_valid(): # Create a new post object with data # from form.cleaned_data return HttpResponseRedirect('/index/') else: form = CreatePost() return render_to_response('create.html', { 'form': form, })

Page 31: Introducción a Django

Formularios

<form action="/create/" method="POST"> {{ form.as_p }} <input type="submit" value="Create"/></form>

Page 32: Introducción a Django

Formularios para models

Son formularios que se crean automaticamente apartir de modelos, con tan solo:

from django.forms import ModelFormclass PostForm(models.ModelForm): class Meta: model = Post

Page 33: Introducción a Django

Proximos pasos

Page 34: Introducción a Django

Hosts para Django

Una extensa lista se encuentra en.http://code.djangoproject.com/wiki/DjangoFriendlyWebHosts

Los populares:http://www.statopia.com/corporate/blog/2007/aug/05/PopularDjangoHostingService/

El Google AppEngine también lo pone facil para Django:http://appengine.google.com/

Page 35: Introducción a Django

Ayuda

Documentación Django:https://docs.djangoproject.com

Cheat sheet:http://www.revsys.com/django/cheatsheet/

Algunos libros:The Django Book: http://www.djangobook.com/Learning Website Development with Django, PacktPractical Django Projects, ApressPro Django, Apress