Django Show
Django Show
Um pouco sobre mim
● Formado em Ciência da Computação● Entusiasta de Python e Django● Colaborador do DjangoBrasil e do PythonBrasil
● Desenvolvedor na globo.com
Django Show não é...
● Um show de uma boy band● Uma apresentação de um indiano cantando barby girl
● Nem uma demonstração de magia
Welcome to the Django!
Arquitetura
● Model● View● Template
Model
from django.db import modelsfrom datetime import datetime
class Link(models.Model): title = models.CharField(max_length = 255) date = models.DateTimeField(default = datetime.now) url = models.URLField(verify_exists = False) description = models.CharField(max_length = 255)
def __unicode__(self): return self.description
View
from django.shortcuts import render_to_responsefrom models import Link
def index(request): links = Link.objects.all() return render_to_response('index.html', {'links':links})
Template{% extends "base.html" %}
{% block content %}
{% for link in links %} <p> <a href="{{ link.url }}"> {{ link.title }} </a> - {{ link.date|date:"d/m/Y" }} </p>{% endfor %}
{% endblock %}
Manipulando os dados>>> from mysite.bookmarks.models import *>>> l = Link()
>>> l.title = 'Python Brasil'>>> l.description = 'Site da comunidade Python no Brasil'>>> l.url = 'http://www.pythonbrasil.com.br'>>> l.save()>>> l<Link: Site da comunidade Python no Brasil>>>> l = Link()>>> l.title = 'Django Brasil'>>> l.description = 'Site da comunidade Django no Brasil'>>> l.url = 'http://www.djangobrasil.org'>>> l.save()>>>
Geração de Formulários
● Model x View x Template● Model x View (Forms + Metodos) x Templates
from django.forms import ModelFormfrom models import Link
class LinkForm(ModelForm):
class Meta: model = Link
Interface de Administração
● Model x ModelAdmin
from django.contrib import adminfrom models import Link
admin.site.register(Link)
Middleware
views
Middleware
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',)
Algumas middlewares
● Session● Authentication● Log● Gzip
Mitos e verdades
● Django e monolítico● Django não escala● O deploy no Django é difícil e complicado
Django e ZODB
● desafio ou loucura? =)
import ZODB.config
class ZODBConnection(object):
def __init__(self): db = ZODB.config.databaseFromURL(zodb_url)
connection = db.open() self.root = connection.root()
ZODBInstance = ZODBConnection()
from djangozodb import ZODBInstance
class ZODBSession(object): def process_request(self, request): request.zodb = ZODBInstance
Outros exemplos
● Django + SQLAlchemy (tranquil)● Django + Storm● Django + CouchDb● Django + SQLObject● Django + Seu ORM Favorito● Django + BigTable on Google App Engine
Mais um exemplo
● Django + REST
Cache
● Cache em disco● Cache em memória● Cache em banco
Cache
● Cache em disco● Cache em memória● Cache em banco ???? =\
Deploy
● Apache = mod_python● Apache = mod_wsgi● Apache = fast_cgi● Lighttpd = fast_cgi● Nginx = fast_cgi● ...
Em todo lugar...
● Cpython● Jython● IronPython● PyPy ?????
Em todo lugar...
● Cpython● Jython● IronPython● PyPy =)
Extra
● Authentication Backend● Signals● Django + {{ sua template system }}