Novidades do Django 1.2 e o que vem por ai

1,127 views
1,049 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,127
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×