The document describes building a web application for managing an album collection using the Django web framework. It shows how to create a Django project and app, define a model for albums, build forms and views to add, display, and delete albums. Templates are used to display the form and album listing. The application allows users to add albums with details, see a list of all albums, and delete albums from the collection.
28. from django.db import models
class Album(models.Model):
artist = models.CharField(max_length=200)
name = models.CharField(max_length=200)
year = models.IntegerField()
cover = models.URLField(verify_exists=False,
blank=True)
def __unicode__(self):
return "%s by %s" % (self.name, self.artist)
collection/models.py
29. from django.db import models
class Album(models.Model):
artist = models.CharField(max_length=200)
name = models.CharField(max_length=200)
year = models.IntegerField()
cover = models.URLField(verify_exists=False,
blank=True)
def __unicode__(self):
return "%s by %s" % (self.name, self.artist)
collection/models.py
30. from django.db import models
class Album(models.Model):
artist = models.CharField(max_length=200)
name = models.CharField(max_length=200)
year = models.IntegerField()
cover = models.URLField(verify_exists=False,
blank=True)
def __unicode__(self):
return "%s by %s" % (self.name, self.artist)
collection/models.py
31. from django.db import models
class Album(models.Model):
artist = models.CharField(max_length=200)
name = models.CharField(max_length=200)
year = models.IntegerField()
cover = models.URLField(verify_exists=False,
blank=True)
def __unicode__(self):
return "%s by %s" % (self.name, self.artist)
collection/models.py
32. from django.db import models
class Album(models.Model):
artist = models.CharField(max_length=200)
name = models.CharField(max_length=200)
year = models.IntegerField()
cover = models.URLField(verify_exists=False,
blank=True)
def __unicode__(self):
return "%s by %s" % (self.name, self.artist)
collection/models.py
33. from django.db import models
class Album(models.Model):
artist = models.CharField(max_length=200)
name = models.CharField(max_length=200)
year = models.IntegerField()
cover = models.URLField(verify_exists=False,
blank=True)
def __unicode__(self):
return "%s by %s" % (self.name, self.artist)
collection/models.py
34. from django.db import models
class Album(models.Model):
artist = models.CharField(max_length=200)
name = models.CharField(max_length=200)
year = models.IntegerField()
cover = models.URLField(verify_exists=False,
blank=True)
def __unicode__(self):
return "%s by %s" % (self.name, self.artist)
collection/models.py
38. from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
39. from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
40. from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
41. from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
42. from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
43. from django.forms import ModelForm
from collection.models import Album
class AlbumForm(ModelForm):
class Meta:
model = Album
exclude = (‘cover’,)
collection/forms.py
44. from django.forms import ModelForm
from collection.models import Album
class AlbumForm(ModelForm):
class Meta:
model = Album
exclude = (‘cover’,)
collection/forms.py
45. from django.forms import ModelForm
from collection.models import Album
class AlbumForm(ModelForm):
class Meta:
model = Album
exclude = (‘cover’,)
collection/forms.py
46. from django.forms import ModelForm
from collection.models import Album
class AlbumForm(ModelForm):
class Meta:
model = Album
exclude = (‘cover’,)
collection/forms.py
47. def add(request):
if request.method == 'POST':
form = AlbumForm(data=request.POST)
if form.is_valid():
album = Album()
album.name = form.cleaned_data['name']
album.artist =
form.cleaned_data['artist']
album.year = form.cleaned_data['year']
album.cover = get_cover_url(album.artist,
album.name)
album.save()
collection/views.py
48. def add(request):
if request.method == 'POST':
form = AlbumForm(data=request.POST)
if form.is_valid():
album = Album()
album.name = form.cleaned_data['name']
album.artist =
form.cleaned_data['artist']
album.year = form.cleaned_data['year']
album.cover = get_cover_url(album.artist,
album.name)
album.save()
collection/views.py
49. def add(request):
if request.method == 'POST':
form = AlbumForm(data=request.POST)
if form.is_valid():
album = Album()
album.name = form.cleaned_data['name']
album.artist =
form.cleaned_data['artist']
album.year = form.cleaned_data['year']
album.cover = get_cover_url(album.artist,
album.name)
album.save()
collection/views.py
50. def add(request):
if request.method == 'POST':
form = AlbumForm(data=request.POST)
if form.is_valid():
album = Album()
album.name = form.cleaned_data['name']
album.artist =
form.cleaned_data['artist']
album.year = form.cleaned_data['year']
album.cover = get_cover_url(album.artist,
album.name)
album.save()
collection/views.py
51. def add(request):
if request.method == 'POST':
form = AlbumForm(data=request.POST)
if form.is_valid():
album = Album()
album.name = form.cleaned_data['name']
album.artist =
form.cleaned_data['artist']
album.year = form.cleaned_data['year']
album.cover = get_cover_url(album.artist,
album.name)
album.save()
collection/views.py
52. def add(request):
if request.method == 'POST':
form = AlbumForm(data=request.POST)
if form.is_valid():
album = Album()
album.name = form.cleaned_data['name']
album.artist =
form.cleaned_data['artist']
album.year = form.cleaned_data['year']
album.cover = get_cover_url(album.artist,
album.name)
album.save()
collection/views.py
53. def add(request):
if request.method == 'POST':
form = AlbumForm(data=request.POST)
if form.is_valid():
album = Album()
album.name = form.cleaned_data['name']
album.artist =
form.cleaned_data['artist']
album.year = form.cleaned_data['year']
album.cover = get_cover_url(album.artist,
album.name)
album.save()
collection/views.py
Apresentar o básico do framework para que vocês conheçam melhor. Implementar uma aplicação para melhor entender o processo de desenvolvimento. Não adianta sair falando um monte de características e não mostrar nada muito real.
Meu nome.
Meu twitter. Maneira mais rápida de falar comigo.
Email para contato.
Vivemos num mundo tecnologico. Muita gente aqui usa a tecnologia com frequencia e muitos também trabalham com tecnologia. Posso dizer que a gente respira tecnologia.
Isso tudo é tão normal pra gente, usar um computador, um celular, carro, geladeira, etc. Que se tornou algo quase natural.
Pra que a tecnologia? A gente não faz essa pergunta com frequencia.
É para isso? Um desenvolvedor pode achar o máximo uma aplicação ter um montão de funcionalidades. Um usuário vai achar isso um inferno, ele não consegue achar com facilidade o que deseja.
Eu estava conversando com alguém de outra área. Ela afirmou não gostar muito de tecnologia e achar difícil. Depois de um certo tempo ela soltou uma frase: “a tecnologia não deveria facilitar a vida das pessoas?”.
Exato! Deveria ser óbvio para gente, mas não é. Ninguém se questiona.
Vocês sabem o que é isso?
Um rádio. Sem botões. Seu manual poderia ter duas linhas.
1 – Para controlar o volume puxe a parte de cima do rádio verticalmente
2 – Para sintonizar gire.
É isso. Muito simples. O nome desse produto é Hidden Radio.
As pessoas querem tecnologia para usar, uma ferramenta que facilite sua vida.
Um artista criando desenhos digitais.
Uma professora usando um quadro eletronico, pois é mais fácil apresentar imagens ricar e interagir com elas.
Essa máquina facilita infinitamente a colheita. Imaginem fazer tudo manualmente.
E nós desenvolvedores?
Nós criamos tecnologia. Mas nós usamos tecnologia para criar tecnologia. O que a gente usa não deveria ser dificil, deveria facilitar nossa vida.
Quando eu conheci Python eu comecei a não gostar de várias outras linguagens. Eu sempre me questionava por que tinha que ser dificil daquele jeito.
Python é um tipo de tecnologia que facilita muito a vida do programador. Hoje eu posso dizer que minha primeira tentativa para resolver algo com programação muito provavelmente será usando Python.
Esse é um dos principios do Zen of Python que diz muito. Simples! Eu quero uma ferramenta pra botar minhas ideias em prática.
Frameworks ajudam demais a colocar ideias em prática. É tudo uma questão de abstração. É código para ajudar a criar código. Você tem todo uma base que ajuda a criar uma aplicação mais facilmente.
Essa frase de Isaac Newton tem muito a ver com computação. A gente está sempre sobre ombros de alguém. E isso é bom, assim podemos enxergar muito longe e criar coisas que não seriam viáveis se não fossem os ombros de gigantes. Frameworks funcionam como ombros.
Django é um framework web escrito em Python. Vou falar bastante dele a partir de agora.
Django foi criado para gerenciar um site jornalistico. Um dos principais requisitos era que fosse possível criar e fazer mudanças rápidas. Depois de um tempo o Django ele se tornou maduro o suficiente para ser usado por outras pessoas e foi liberado para o público. Hoje ele é o framework web mais popular pra Python
E o nome? Alguem sabe de onde vem?
Vem do músico de jazz Django Reinhardt
O Django usa a conhecida arquitetura MVC
Model – a representação dos dados
View – como as coisas são exibidas
Controller – pega a entrada do usuário, pega informações dos modelos, processa e devolve pra view
Vou mostrar um pouco de código
Vamos criar uma aplicação para gerenciar uma coleção musical
Esse é o comando do django para iniciar um novo projeto.
São criados esses arquivos
manage.py – não deve ser modificado. Traz vários comandos para ajudar no desenvolvimento, por exemplo, syncdb, runserver, etc.
settings.py – configurações do rpojeto
urls.py – configuração das urls.
Configurando o settings.
Comando para criar uma nova aplicação
Um projeto django é composto de várias aplicações.
Cria uma pasta collection.
Models.py – definição dos modelos da aplicação
Tests.py – implementação dos testes
Views.py – definição das views da aplicação.
Como ficou o modelo album
Adicionando app no settings
Criando tabelas
Primeira página: add/ para adicionar um novo album.
Configurando o arquivo urls
Settings.py
Settings.py
Settings.py
Settings.py
Precisamos de um formulário para adicionar algo num site. Vamos criar um.
Form de acordo com o modelo.
Define o modelo
Exclui o campo cover, não quero adicionar a capa manualmente.
View para adicionar um novo album
Configurações no settings para definir onde ficarão os templates.
Template add.
Rodando o servidor
resultado
Proxima página, o index.
Adicionando uma url
View index
Template index
resultado
Ultima url, deletar.
Mais uma url.
Settings.py
Settings.py
Settings.py
Settings.py
Settings.py
Settings.py
View delete
resultado
Resultado com css
Vou colocar o código aqui.
Vocês viram o basico. Django tem muita mais coisa. A internet tem muito material, vale a pena procurar.
Sempre que necessário você pode usar todo o poder do Python. A função get_covers mostrou isso. Ali não tem nada especifico do Django.
O Django é uma ótima ferramenta. Ele simplifica muita tarefa chata e agiliza muita coisa tambem.
O Django é muito popular e sua comunidade é sempre ativa. Existem inúmeras aplicações criadas por terceiros prontas para serem usadas e vários desenvolvedores ajudando no projeto.