django além do admin

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

Upload: francisco-souza

Post on 15-Jan-2015

5.247 views

Category:

Technology


1 download

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/

TRANSCRIPT

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]