django além do admin

Post on 15-Jan-2015

5.247 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

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!

Francisco Souzafrancisco@franciscosouza.net

www.franciscosouza.com

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...

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'], ['dest@gmail.com'], fail_silently=True)

django.core.mail.send_mail

EMAIL_HOST = 'smtp.voce.com'EMAIL_HOST_USER = 'nome@sobrenome.com'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

francisco@franciscosouza.net

top related