Django

Desenvolvimento web para perfeccionistas com prazos

Quem sou eu?

Gilson Filho

  • Desenvolvimento web a 8 anos
  • Java, ASP, PHP e Python
  • Entusiasta em Software Livre e VIM
  • Participo em várias comunidades como GruPyDF
  • Contribuo em vários projetos opensource
  • 5 anos com Python e Django

O que é Python?

  • Criado por Guido Van Rossum
  • Linguagem de alto nível
  • Multiparadigma
  • Interpretada
  • Tipagem forte a dinâmica
  • Sintaxe de fácil leitura
  • Multiplataforma
  • Baterias incluídas

História do Python

Quem usa?

Visão Geral do Python

Materiais para Estudo

Aprendendo computação com Python

http://bit.ly/computacao-python

Aprendendo Python em 10 minutos (en)

https://www.stavros.io/tutorials/python

O que é Django?

  • Framework Fullstack
  • DRY (don't repeat yourself)
  • Menos código
  • Acoplamento fraco
  • Consistência
  • Baterias incluídas
  • Escalável

Quem usa?

Arquitetura

Features

ORM Nativo

# Criando novo post
>>> Post.objects.create(title="Post Test", body="Content")

# Buscando todos os posts no banco de dados
>>> Post.objects.all()
[<Post: Post Test>]

# Pesquisando determinado post a partir do seu título
>>> post = Post.objects.get(title="Post Test")

# Exibindo o valor do atributo 'title'
>>> post.title
Post Test

# Atualizando título do post
>>> post.title = "Post Updated"
>>> post.save()

# Removendo post
>>> post.delete()

>>> Post.objects.all()
[]

Rotas customizadas

from django.conf.urls import url

from . import views

urlpatterns = [
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
]

Criação de Views

def index(request):
    latest_question_list = Post.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'post/index.html', context)

def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)

Templates

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

Templates

<ul>		
    <li><a href="/polls/1/">Qual é a melhor palestra no FLISOL 2016?</a></li>
    <li><a href="/polls/2/">Como foi a recepção no evento?</a></li>
    <li><a href="/polls/3/">A localização do evento está boa para você?</a></li>
</ul>
	

Forms

<form action="/your-name/" method="post">
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
    <input type="submit" value="OK">
</form>
from django import forms

class NameForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=100)

Forms

<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit" />
</form>
<form action="/your-name/" method="post">
    <input type="hidden" name="csrfmiddlewaretoken" value="sdalkj23109da...">
    <p>
        <label for="your_name">Your name: </label>
        <input id="your_name" type="text" name="your_name" maxlength="100">
    </p>
    <input type="submit" value="Submit" />
</form>

Demo

Sistema de Enquetes

Autenticação

django.contrib.auth

Painel Administrativo

django.contrib.admin

Login

Tela Inicial

Listagem de Registros

Cadastro

Internacionalização e Localização

e muito mais...

O que fazer agora?

Pense em Python

Python Fluente

Grupos de Discussão

GruPy-DF

Python Brasil

Django Brasil

Grupo GruPy-DF

Canal Python Brasil

Dúvidas?

Sorteio ;)

Obrigado a todos!

Django: Desenvolvimento web para perfeccionistas com prazos

By Gilson Filho

Django: Desenvolvimento web para perfeccionistas com prazos

Apresentação do framework Django nos eventos técnicos

  • 1,075