Novidades do Django 1.2 e o que vem por ai

download Novidades do Django 1.2 e o que vem por ai

If you can't read please download the document

Transcript of Novidades do Django 1.2 e o que vem por ai

Novidades do Django 1.2 e o que vem por ai

Marcos Daniel Petry@petry

Petry?

Marcos Daniel Petry

Bacherel em Cincias da Computao

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 Associao Python Brasil

Sobre

Verso 1.2 em 17 de maio de 2010Verso 1.2.1 dia 21

No h mais suporte ao Python 2.3

Novidades?

Suporte a vrias conexes com Bancos de Dados

Mensagens

Consultas SQL Customizadas mas fceis

Validao de models

Proteo Cross-Site obrigatria

Flexibilidade nas permisses

...

Suporte a Mltiplos BDs

Suporte a Mltiplos BDs

Django < 1.2

DATABASES_NAME = 'app_data'DATABASE_ENGINE = 'postgresql_psycopg2'DATABASE_USER = 'postgres_user'ATABASE_PASSWORD = 's3krit'

Suporte a Mltiplos 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 Mltiplos BDs

Django >= 1.2Novo Parametro/metodo: using

>>> # 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="admin").using("users")

>>> my_object.save(using='legacy_users')

Mensagens

Mensagens

Django < 1.2...Era necessrio utilizar a app de autenticaoSem muitos recursos =(

Criar um Middlware =((

Mensagens

Django >= 1.2Mensagens para todos!

Suporte a tipos e nveis de mensagens

As mensagens poder guardadas em diversos meios (BD, cookies, sesses...)

Mensagens

Code, code, code...

from django.contrib import messagesmessages.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 %}

  • {% for message in messages %} {{ message }} {% endfor %}

{% endif %}

Consultas SQL Customizadas

Django < 1.2

from django.db import connectionfrom library.models import Author

cursor = connection.cursor()query = "SELECT * FROM library_author"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 Authorquery = "SELECT * FROM library_author"authors = Author.objects.raw(query)

>>> authors = Author.objects.raw("SELECT *, age(birth_date) as age FROM library_authors")>>> for author in authors:... print "%s is %s." % (author.first_name, author.age)John is 37.Jane is 42....

Consultas SQL Customizadas

Use somente se necessrio!!!

Validao de dados

Validao de dados

Django < 1.2Somente formulrios

Os modelos so validados atravs do ModelForms ( que tambem so modelos =P )

Validao de dados

Django >= 1.2A validao tanto de models quanto forms

Reutilizvel

Validao de dados

from django.core.exceptions import ValidationErrorfrom 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...

Cross-Site Request Forgery

Cross-Site Request Forgery

Era uma proteo opcional, agora, obrigatria

Estava no contrib, agora, faz parte do core do Django

Permisses + Flexiveis

Permisses + Flexiveis

AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'myperm.backend.ObjectPermBackend',)

from django.conf import settingsfrom 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): ...

Admin com JQuery

Admin com Jquery

Templates

Cache

Comando IF

Templates

CacheTEMPLATE_LOADERS = ( ('django.template.loaders.cached.Loader', ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', )),)

Templates

Django < 1.2

{% ifequal somevar "x" %} This appears if variable somevar equals the string "x"{% endifequal %}

{% ifnotqual somevar "x" %} This appears if variable somevar does not equal the string "x", or if somevar is not found in the context{% endifnotequal %}

Templates

Django >= 1.2

{% if somevar == "x" %} This appears if variable somevar equals the string "x"{% endif %}

{% if somevar != "x" %} This appears if variable somevar does not equal the string "x", or if somevar is not found in the context{% endif %}

{% if you.friends.count > 5 %}You're popular!{% endif %}{% if country != "BR" %}Come and visit Brazil!{% endif %}

{% if staff or author and not expired %} Edit this{% endif %}

E muito mais!

Debug colorido

Campo read-only no admin

Feeds mais flexiveis

Backend de email configurvel

Melhorias na I18n e L10n

E o que vem por ai?

Duvidas?

[email protected]@petryblog.mdpetry.net

http://slideshare.net/mdpetry

Klicken Sie, um das Format des Titeltextes zu bearbeiten

Text