SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Novidades do Django 1.2 e o que vem por ai  Marcos Daniel Petry @petry
Petr y? ,[object Object]
Bacherel em Ciências da Computação
Desenvolvedor Python/Django na UCS
Trabalha com Python a 5 ou 6 anos
Já programei em outras cois... linguagens
Já usei outros frameworks
Vice-presidente da Associação Python Brasil
Sobre ,[object Object]
Novidades? ,[object Object]
Mensagens
Consultas SQL Customizadas mas fáceis
Validação de models
Proteção Cross-Site obrigatória
Flexibilidade nas permissões
...
Suporte a Múltiplos BDs
Suporte a Múltiplos BDs Django < 1.2 DATABASES_NAME = 'app_data' DATABASE_ENGINE = 'postgresql_psycopg2' DATABASE_USER = 'postgres_user' ATABASE_PASSWORD = 's3krit'
Suporte a Múltiplos BDs DATABASES = { 'default': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'postgres_user', 'PASSWORD': 's3krit' }, 'users': { 'NAME': 'user_data', 'ENGINE': 'django.db.backends.mysql', 'USER': 'mysql_user', 'PASSWORD': 'priv4te' } } Django >= 1.2
Suporte a Múltiplos BDs Django >= 1.2 ,[object Object],>>> # This will run on the 'default' database. >>> Author.objects.all() >>> # So will this. >>> Author.objects.using('default').all() >>> # This will run on the 'other' database. >>> Author.objects.using('other').all() >>> User.objects.filter(username__startswith=&quot;admin&quot;).using(&quot;users&quot;) >>> my_object.save(using='legacy_users')
Mensagens
Mensagens Django < 1.2... ,[object Object]
Mensagens Django >= 1.2 ,[object Object]
Suporte a tipos e níveis de mensagens
As mensagens poder guardadas em diversos meios (BD, cookies, sessões...)
Mensagens Code, code, code... from django.contrib import messages messages.debug(request, '%s SQL statements were executed.' % count) messages.info(request, 'Three credits remain in your account.') messages.success(request, 'Profile details updated.') messages.warning(request, 'Your account expires in three days.') messages.error(request, 'Document deleted.') {% if messages %} <ul class=&quot;messages&quot;> {% for message in messages %} <li{% if message.tags %} class=&quot;{{ message.tags }}&quot;{% endif %}>{{ message }}</li> {% endfor %} </ul> {% endif %}
Consultas SQL Customizadas Django < 1.2 from django.db import connection from library.models import Author cursor = connection.cursor() query = &quot;SELECT * FROM library_author&quot; cursor.execute(query) results = cursor.fetchall() authors = [] for result in results: author = Author(*result) authors.append(author)
Consultas SQL Customizadas Django >= 1.2 from library.models import Author query = &quot;SELECT * FROM library_author&quot; authors = Author.objects.raw(query) >>> authors = Author.objects.raw(&quot;SELECT *, age(birth_date) as age FROM library_authors&quot;) >>> for author in authors: ...  print &quot;%s is %s.&quot; % (author.first_name, author.age) John is 37. Jane is 42. ...
Consultas SQL Customizadas ,[object Object]
Validação de dados
Validação de dados Django < 1.2 ,[object Object]
Os modelos são validados através do ModelForms ( que tambem são modelos =P )

Weitere ähnliche Inhalte

Was ist angesagt?

Django Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoDjango Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoLeandro Zanuz
 
Getna: Gerador de Código RubyOnRails apartir de banco de dados
Getna: Gerador de Código RubyOnRails apartir de banco de dadosGetna: Gerador de Código RubyOnRails apartir de banco de dados
Getna: Gerador de Código RubyOnRails apartir de banco de dadosMaximusmano
 

Was ist angesagt? (9)

Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Let's log!
Let's log!Let's log!
Let's log!
 
Introdução a worker
Introdução a workerIntrodução a worker
Introdução a worker
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Django Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoDjango Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a Otimização
 
Cabra Macho
Cabra MachoCabra Macho
Cabra Macho
 
Getna: Gerador de Código RubyOnRails apartir de banco de dados
Getna: Gerador de Código RubyOnRails apartir de banco de dadosGetna: Gerador de Código RubyOnRails apartir de banco de dados
Getna: Gerador de Código RubyOnRails apartir de banco de dados
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
 
Php FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHPPhp FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHP
 

Andere mochten auch

Django staticfiles
Django staticfilesDjango staticfiles
Django staticfilesMarcos Petry
 
Melhorando a performance de aplicações Django
Melhorando a performance de aplicações DjangoMelhorando a performance de aplicações Django
Melhorando a performance de aplicações DjangoMarcos Petry
 
Ucs e Python: Um casamento que deu certo!
Ucs e Python: Um casamento que deu certo!Ucs e Python: Um casamento que deu certo!
Ucs e Python: Um casamento que deu certo!Marcos Petry
 
Python mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetPython mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetMarcos Petry
 
Desenvolvimento ágil do jeito certo
Desenvolvimento ágil do jeito certoDesenvolvimento ágil do jeito certo
Desenvolvimento ágil do jeito certoMarcos Petry
 
Django Performance Recipes
Django Performance RecipesDjango Performance Recipes
Django Performance RecipesJon Atkinson
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com DjangoMarcos Petry
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 

Andere mochten auch (9)

Django staticfiles
Django staticfilesDjango staticfiles
Django staticfiles
 
Melhorando a performance de aplicações Django
Melhorando a performance de aplicações DjangoMelhorando a performance de aplicações Django
Melhorando a performance de aplicações Django
 
Ucs e Python: Um casamento que deu certo!
Ucs e Python: Um casamento que deu certo!Ucs e Python: Um casamento que deu certo!
Ucs e Python: Um casamento que deu certo!
 
Python mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetPython mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internet
 
Desenvolvimento ágil do jeito certo
Desenvolvimento ágil do jeito certoDesenvolvimento ágil do jeito certo
Desenvolvimento ágil do jeito certo
 
Django Performance Recipes
Django Performance RecipesDjango Performance Recipes
Django Performance Recipes
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Ähnlich wie Novidades do Django 1.2 e o que vem por ai

Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Novidades do Django 1.2
Novidades do Django 1.2Novidades do Django 1.2
Novidades do Django 1.2flavioamieiro
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpRodrigo Aramburu
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Desenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engineDesenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app enginepugpe
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 
Django Tem Ritmo
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmoitalomaia
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 

Ähnlich wie Novidades do Django 1.2 e o que vem por ai (20)

PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Novidades do Django 1.2
Novidades do Django 1.2Novidades do Django 1.2
Novidades do Django 1.2
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Workshop05
Workshop05Workshop05
Workshop05
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Desenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engineDesenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engine
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 
Python 08
Python 08Python 08
Python 08
 
Django Tem Ritmo
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmo
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Pdm -final
Pdm  -finalPdm  -final
Pdm -final
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 

Novidades do Django 1.2 e o que vem por ai

  • 1. Novidades do Django 1.2 e o que vem por ai Marcos Daniel Petry @petry
  • 2.
  • 3. Bacherel em Ciências da Computação
  • 5. Trabalha com Python a 5 ou 6 anos
  • 6. Já programei em outras cois... linguagens
  • 7. Já usei outros frameworks
  • 9.
  • 10.
  • 16. ...
  • 18. Suporte a Múltiplos BDs Django < 1.2 DATABASES_NAME = 'app_data' DATABASE_ENGINE = 'postgresql_psycopg2' DATABASE_USER = 'postgres_user' ATABASE_PASSWORD = 's3krit'
  • 19. Suporte a Múltiplos BDs DATABASES = { 'default': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'postgres_user', 'PASSWORD': 's3krit' }, 'users': { 'NAME': 'user_data', 'ENGINE': 'django.db.backends.mysql', 'USER': 'mysql_user', 'PASSWORD': 'priv4te' } } Django >= 1.2
  • 20.
  • 22.
  • 23.
  • 24. Suporte a tipos e níveis de mensagens
  • 25. As mensagens poder guardadas em diversos meios (BD, cookies, sessões...)
  • 26. Mensagens Code, code, code... from django.contrib import messages messages.debug(request, '%s SQL statements were executed.' % count) messages.info(request, 'Three credits remain in your account.') messages.success(request, 'Profile details updated.') messages.warning(request, 'Your account expires in three days.') messages.error(request, 'Document deleted.') {% if messages %} <ul class=&quot;messages&quot;> {% for message in messages %} <li{% if message.tags %} class=&quot;{{ message.tags }}&quot;{% endif %}>{{ message }}</li> {% endfor %} </ul> {% endif %}
  • 27. Consultas SQL Customizadas Django < 1.2 from django.db import connection from library.models import Author cursor = connection.cursor() query = &quot;SELECT * FROM library_author&quot; cursor.execute(query) results = cursor.fetchall() authors = [] for result in results: author = Author(*result) authors.append(author)
  • 28. Consultas SQL Customizadas Django >= 1.2 from library.models import Author query = &quot;SELECT * FROM library_author&quot; authors = Author.objects.raw(query) >>> authors = Author.objects.raw(&quot;SELECT *, age(birth_date) as age FROM library_authors&quot;) >>> for author in authors: ... print &quot;%s is %s.&quot; % (author.first_name, author.age) John is 37. Jane is 42. ...
  • 29.
  • 31.
  • 32. Os modelos são validados através do ModelForms ( que tambem são modelos =P )
  • 33.
  • 35. Validação de dados from django.core.exceptions import ValidationError from django.db import models def validate_even(value): if value % 2 != 0: raise ValidationError(u'%s is not an even number' % value) class MyModel(models.Model): even_field = models.IntegerField(validators=[validate_even]) Code, code, code...
  • 37.
  • 38. Estava no contrib, agora, faz parte do core do Django
  • 40. Permissões + Flexiveis AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', ' myperm .backend.ObjectPermBackend', ) from django.conf import settings from myperm.models import ObjectPermission class ObjectPermBackend(object): supports_object_permissions = True supports_anonymous_user = True def authenticate(self, username, password): ... def has_perm(self, user_obj, perm, obj=None): ...
  • 43.
  • 45. Templates Cache TEMPLATE_LOADERS = ( ('django.template.loaders.cached.Loader', ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', )), )
  • 46. Templates Django < 1.2 {% ifequal somevar &quot;x&quot; %} This appears if variable somevar equals the string &quot;x&quot; {% endifequal %} {% ifnotqual somevar &quot;x&quot; %} This appears if variable somevar does not equal the string &quot;x&quot;, or if somevar is not found in the context {% endifnotequal %}
  • 47. Templates Django >= 1.2 {% if somevar == &quot;x&quot; %} This appears if variable somevar equals the string &quot;x&quot; {% endif %} {% if somevar != &quot;x&quot; %} This appears if variable somevar does not equal the string &quot;x&quot;, or if somevar is not found in the context {% endif %} {% if you.friends.count > 5 %}You're popular!{% endif %} {% if country != &quot;BR&quot; %}Come and visit Brazil!{% endif %} {% if staff or author and not expired %} <a href=&quot;{{ edit_url }}&quot;>Edit this</a> {% endif %}
  • 48.
  • 51. Backend de email configurável
  • 53. E o que vem por ai?
  • 54. Duvidas? [email_address] @petry blog.mdpetry.net http://slideshare.net/mdpetry