41
O Django é o “framework web para perfeccionistas com prazos”... ... e o seu principal recurso é o Django Admin. Esse cara ta me zoando...

Django além do admin

Embed Size (px)

DESCRIPTION

Apresentação "Django além do admin", realizado no ciclo de apresentações internas da Giran (Giran Siege).Mais detalhes sobre o Giran Siege: http://blog.giran.com.br/2010/09/giran-siege-palestras-internas-da-giran/

Citation preview

Page 1: Django além do admin

O Django é o “framework web para perfeccionistas com prazos”...

... e o seu principal recurso é o Django Admin.

Esse cara ta me zoando...

Page 2: Django além do admin

http://2.bp.blogspot.com/_WHZ6KCOzbjE/S-qISN_FKuI/AAAAAAAABq4/Np0J_Vsf_vk/s1600/RafikisWords.jpg

Além do que seus olhos podem ver!

Page 3: Django além do admin

Francisco [email protected]

www.franciscosouza.com

Django além do admin

Page 4: Django além do admin

http://www.flickr.com/photos/41460120@N04/4217783923/

Quer dizer que o admin não é o

principal recurso do Django?!

Não é bem assim, mano...

Page 5: Django além do admin

http://www.flickr.com/photos/villes/1348742988/

Page 6: Django além do admin

http://www.flickr.com/photos/desiitaly/2201907500/

então

qual é

Page 7: Django além do admin

O principal recurso do Django é o mais fundamental

para a sua aplicação

Page 8: Django além do admin

Conheça os recursos!

Page 9: Django além do admin
Page 10: Django além do admin

class Product(models.Model): name = models.CharField(max_length=200) description = models.TextField() price = models.FloatField() creation_date = models.DateField(auto_now_add=True) last_modification_date = models.DateField(auto_now=True) hidden = models.BooleanField(default=False) image = models.ImageField(upload_to='images/products', max_length=200)

Page 11: Django além do admin

Salvando objetosdef new_product(request): """Renders a product form on GET requests and saves a product on POST requests""" form = ProductForm() if request.method == 'POST': form = ProductForm(request.POST, request.FILES) if form.is_valid(): form.save() return HttpResponse('Product saved.')

return render_to_response('product_form.html', { 'form' : form }, context_instance=RequestContext(request) )

Page 12: Django além do admin

urls.py

urlpatterns = patterns('', (r'^new_product', 'views.new_product'),)

Page 13: Django além do admin

E se for outro model?def new_product(request): """Renders a product form on GET requests and saves a product on POST requests""" form = ProductForm() if request.method == 'POST': form = ProductForm(request.POST, request.FILES) if form.is_valid(): form.save() return HttpResponse('Product saved.')

return render_to_response('product_form.html', { 'form' : form }, context_instance=RequestContext(request) )

Page 14: Django além do admin

E se for outro model?def new_category(request): """Renders a category form on GET requests and saves a category on POST requests""" form = CategoryForm() if request.method == 'POST': form = CategoryForm(request.POST, request.FILES) if form.is_valid(): form.save() return HttpResponse('Category saved.')

return render_to_response('category_form.html', { 'form' : form }, context_instance=RequestContext(request) )

Page 15: Django além do admin

Que tal outro?def new_customer(request): """Renders a customer form on GET requests and saves a customer on POST requests""" form = CustomerForm() if request.method == 'POST': form = CustomerForm(request.POST, request.FILES) if form.is_valid(): form.save() return HttpResponse('Customer saved.')

return render_to_response('customer_form.html', { 'form' : form }, context_instance=RequestContext(request) )

Page 16: Django além do admin

http://abhinavpmp.com/wp-content/uploads/repetition.jpg

Don't repeat yourself!

Page 17: Django além do admin

http://abhinavpmp.com/wp-content/uploads/repetition.jpg

Don't repeat yourself!

I don't yourself?!

Page 18: Django além do admin

Generic views

urlpatterns = patterns('', (r'^new_product', 'django.views.generic.create_update.create_object', { 'model' : Product, 'post_save_redirect' : '/products/', 'template_name' : 'product_form.html' }),)

Page 19: Django além do admin

http://bit.ly/generic-views

Page 20: Django além do admin

Autenticação

LOGIN_URL = '/login/'

LOGIN_REDIRECT_URL = '/'

Page 21: Django além do admin

Autenticação

def say_hello(request): """Says Hello world on GET requests""" return HttpResponse('Hello world!')

Page 22: Django além do admin

Autenticação

@login_requireddef say_hello(request): """Says Hello world on GET requests""" return HttpResponse('Hello world!')

Page 23: Django além do admin

Django Forms

class ProductForm(forms.Form): name = forms.CharField(max_length=200) description = forms.TextField() price = forms.FloatField() hidden = forms.BooleanField(default=False) image = forms.ImageField(upload_to='images/products', max_length=200)

Page 24: Django além do admin

Django Model Forms

class ProductForm(forms.ModelForm): class Meta: model = Product

Page 25: Django além do admin

Validação sem dor

class ContactForm(forms.Form): name = forms.CharField(max_length=150) email = forms.EmailField(max_length=75) message = forms.TextField()

Page 26: Django além do admin

http://bit.ly/django-felds

Page 27: Django além do admin

Localização

class ContactForm(forms.Form): name = forms.CharField(max_length=150) email = forms.EmailField(max_length=75) cpf = BRCPFField() message = forms.CharField(widget=forms.Textarea)

Page 28: Django além do admin

Localização

class ContactForm(forms.Form): name = forms.CharField(max_length=150) email = forms.EmailField(max_length=75) cpf = BRCPFField() message = forms.CharField(widget=forms.Textarea)

Valida CPF?! :O

Page 29: Django além do admin

http://bit.ly/django-l10n

Page 30: Django além do admin

Enviando e-mail

class ContactForm(forms.Form): name = forms.CharField(max_length=150) email = forms.EmailField(max_length=75) cpf = BRCPFField() message = forms.CharField(widget=forms.Textarea)

def send_email(self): msg = "Hi, I'm %(name)s. My message for you: %(message)s. My CPF is %(cpf)s." % self.cleaned_data send_mail('Contact', msg, self.cleaned_data['email'], ['[email protected]'], fail_silently=True)

Page 31: Django além do admin

django.core.mail.send_mail

EMAIL_HOST = 'smtp.voce.com'EMAIL_HOST_USER = '[email protected]'EMAIL_HOST_PASSWORD = 'senha123'EMAIL_PORT = 25EMAIL_USE_TLS = False

Page 32: Django além do admin

Enviando e-mail

def contact(request): """Renders a contact form on GET requests and sends an email on POST requests""" form = ContactForm() if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): form.send_email() return HttpResponse("Mail sent.") return render_to_response('contact_form.html', { 'form' : form }, context_instance=RequestContext(request) )

Page 33: Django além do admin

Test client

django.test.client.Client

from django.test.client import Client

client = Client()response = client.get('/contact/')assert 'Name' in response.content

Page 34: Django além do admin

http://bit.ly/django-testing

Page 35: Django além do admin

http://www.flickr.com/photos/jkonig/2056057464/

Chega!

Page 36: Django além do admin

Antes de terminarmos...

Page 37: Django além do admin

Signals

pre_save

post_save

pre_delete

post_delete

request_started

request_fnished

Page 38: Django além do admin

http://bit.ly/django-signals

Page 39: Django além do admin

Tem mais?!

Page 40: Django além do admin

djangoproject.com

Page 41: Django além do admin

Obrigado!www.giran.com.br

[email protected]