Upload
francisco-souza
View
5.237
Download
1
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
O Django é o “framework web para perfeccionistas com prazos”...
... e o seu principal recurso é o Django Admin.
Esse cara ta me zoando...
http://2.bp.blogspot.com/_WHZ6KCOzbjE/S-qISN_FKuI/AAAAAAAABq4/Np0J_Vsf_vk/s1600/RafikisWords.jpg
Além do que seus olhos podem ver!
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...
http://www.flickr.com/photos/villes/1348742988/
http://www.flickr.com/photos/desiitaly/2201907500/
então
qual é
O principal recurso do Django é o mais fundamental
para a sua aplicação
Conheça os recursos!
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)
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) )
urls.py
urlpatterns = patterns('', (r'^new_product', 'views.new_product'),)
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) )
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) )
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) )
http://abhinavpmp.com/wp-content/uploads/repetition.jpg
Don't repeat yourself!
http://abhinavpmp.com/wp-content/uploads/repetition.jpg
Don't repeat yourself!
I don't yourself?!
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' }),)
http://bit.ly/generic-views
Autenticação
LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/'
Autenticação
def say_hello(request): """Says Hello world on GET requests""" return HttpResponse('Hello world!')
Autenticação
@login_requireddef say_hello(request): """Says Hello world on GET requests""" return HttpResponse('Hello world!')
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)
Django Model Forms
class ProductForm(forms.ModelForm): class Meta: model = Product
Validação sem dor
class ContactForm(forms.Form): name = forms.CharField(max_length=150) email = forms.EmailField(max_length=75) message = forms.TextField()
http://bit.ly/django-felds
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)
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
http://bit.ly/django-l10n
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)
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
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) )
Test client
django.test.client.Client
from django.test.client import Client
client = Client()response = client.get('/contact/')assert 'Name' in response.content
http://bit.ly/django-testing
http://www.flickr.com/photos/jkonig/2056057464/
Chega!
Antes de terminarmos...
Signals
pre_save
post_save
pre_delete
post_delete
request_started
request_fnished
http://bit.ly/django-signals
Tem mais?!
djangoproject.com
Obrigado!www.giran.com.br