Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Novidades do Django 1.2 e o que vem por ai

1,200 views

Published on

Palestra apresentada no Fórum Internacional de Software Livre em 2010

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Novidades do Django 1.2 e o que vem por ai

  1. 1. Novidades do Django 1.2 e o que vem por ai Marcos Daniel Petry @petry
  2. 2. Petr y? <ul><li>Marcos Daniel Petry
  3. 3. Bacherel em Ciências da Computação
  4. 4. Desenvolvedor Python/Django na UCS
  5. 5. Trabalha com Python a 5 ou 6 anos
  6. 6. Já programei em outras cois... linguagens
  7. 7. Já usei outros frameworks
  8. 8. Vice-presidente da Associação Python Brasil </li></ul>
  9. 9. Sobre <ul><li>Versão 1.2 em 17 de maio de 2010 </li><ul><li>Versão 1.2.1 dia 21 </li></ul><li>Não há mais suporte ao Python 2.3 </li></ul>
  10. 10. Novidades? <ul><li>Suporte a várias conexões com Bancos de Dados
  11. 11. Mensagens
  12. 12. Consultas SQL Customizadas mas fáceis
  13. 13. Validação de models
  14. 14. Proteção Cross-Site obrigatória
  15. 15. Flexibilidade nas permissões
  16. 16. ... </li></ul>
  17. 17. Suporte a Múltiplos BDs
  18. 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. 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. 20. Suporte a Múltiplos BDs Django >= 1.2 <ul><li>Novo Parametro/metodo: using </li></ul>>>> # 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')
  21. 21. Mensagens
  22. 22. Mensagens Django < 1.2... <ul><li>Era necessário utilizar a app de autenticação </li><ul><li>Sem muitos recursos =( </li></ul><li>Criar um Middlware =(( </li></ul>
  23. 23. Mensagens Django >= 1.2 <ul><li>Mensagens para todos!
  24. 24. Suporte a tipos e níveis de mensagens
  25. 25. As mensagens poder guardadas em diversos meios (BD, cookies, sessões...) </li></ul>
  26. 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. 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. 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. 29. Consultas SQL Customizadas <ul>Use somente se necessário!!! </ul>
  30. 30. Validação de dados
  31. 31. Validação de dados Django < 1.2 <ul><li>Somente formulários
  32. 32. Os modelos são validados através do ModelForms ( que tambem são modelos =P ) </li></ul>
  33. 33. Validação de dados Django >= 1.2 <ul><li>A validação tanto de models quanto forms
  34. 34. Reutilizável </li></ul>
  35. 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...
  36. 36. Cross-Site Request Forgery
  37. 37. Cross-Site Request Forgery <ul><li>Era uma proteção opcional, agora, é obrigatória
  38. 38. Estava no contrib, agora, faz parte do core do Django </li></ul>
  39. 39. Permissões + Flexiveis
  40. 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): ...
  41. 41. Admin com JQuery
  42. 42. Admin com Jquery
  43. 43. Templates <ul><li>Cache
  44. 44. Comando IF </li></ul>
  45. 45. Templates Cache TEMPLATE_LOADERS = ( ('django.template.loaders.cached.Loader', ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', )), )
  46. 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. 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. 48. E muito mais! <ul><li>Debug colorido
  49. 49. Campo read-only no admin
  50. 50. Feeds mais flexiveis
  51. 51. Backend de email configurável
  52. 52. Melhorias na I18n e L10n </li></ul>
  53. 53. E o que vem por ai?
  54. 54. Duvidas? [email_address] @petry blog.mdpetry.net http://slideshare.net/mdpetry

×