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
Pycubator
Python para Zumbis
Aprendendo Python em 10 minutos (en)
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