Introducción a Django
Universidade de A Coruña, 21 noviembre 2011Joaquim Rocha <[email protected]>
http://www.joaquimrocha.com
¿Qué es?
"Django is a highlevel Python Web frameworkthat encourages rapid development andclean, pragmatic design."
(de la página oficial de 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
El framework
Object-Relational Mapper (ORM)
Interfaz de Admin automática
Diseño de URLs elegante
Poderoso sistema de plantillas
i18n
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
Poner proyectos en producción
mod_wsgiFastCGImod_python...
Backend de BD
Soportados oficialmente:
PostreSQLMySQLSQLiteOracle
Usando 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
Desarrollo
Creación de un proyecto
$ django-admin.py startproject Project
Project/ __init__.py manage.py settings.py urls.py
Executar de un proyecto
$ ./manage.py runserver
... y abre en tu navegador: localhost:8000
Desarrollo
Los proyectos de Django tienen aplicacions (Apps)
Las Apps son los componentes de los proyectos
Creación de una aplicación
$ ./manage.py startapp my_app
my_app/ __init__.py models.py tests.py views.py
Construir la base de datos
$ ./manage.py syncdb
Configuración de un proyecto
Configuración sencilla en el archivo settings.py
Desarrollo
Django sigue el patrón de diseño MTV
Model-Template-View
Modelos
Los modelos son classes que representan objetosen la base de datos
¡Y no tendrás que tocar en SQL jamás!
Modelos
class Post(models.Model):
title = models.CharField(max_length = 500) content = models.TextField() date = models.DateTimeField(auto_now = True) ...
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?
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})
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
Templates
¡Prevendrán que te repitas!
Y los designers no tendrán que tocar el código.
<html> <head> <title>{% block title %}{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body></html>
{% 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 %}
URLs
En Django, los URLs ¡son parte del diseño!
urls.py usa expresiones regulares para mapear URLs con vistas
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'),)
Formularios
Son clases que representan un formulario HTML
Dejan que se pueda facilmente configurar lostipos esperados de inputs, mensages de error,etiquetas, etc.
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)
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, })
Formularios
<form action="/create/" method="POST"> {{ form.as_p }} <input type="submit" value="Create"/></form>
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
Proximos pasos
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/
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
Top Related