Novidades do Django 1.2 e o que vem por ai
-
Upload
marcos-petry -
Category
Technology
-
view
1.179 -
download
0
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