DESENVOLVIMENTO
WEB USANDO
DJANGO
YURIMALHEIROS@
YURIMALHEIROS
@GMAIL.COM
TECNOLOGIA
TECNOLOGIA?
TECNOLOGIA?
SIMPLE IS
BETTER THAN
COMPLEX
FRAMEWORKS
”
“SE VI MAIS
LONGE FOI POR
ESTAR SOBRE
OS OMBROS
DE GIGANTES
UM POUCO DE
HISTÓRIA...
MODEL
VIEW
CONTROLLER
MODEL
TEMPLATE
CONTROLLER
MODEL
TEMPLATE
VIEW
CODIFICANDO
django-admin startproject mymusic
mymusic
manage.py
settings.py
urls.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db.sqlite',
'USER': '‘,
'PASSWORD': '‘,
'HOST': '‘,
'PORT': '‘, }
}
settings.py
manage.py startapp collection
collection
models.py
tests.py
views.py
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
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
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
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
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
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
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
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'collection',
)
settings.py
manage.py syncdb
add/
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^add/$', collection_views.add),
)
urls.py
from django.forms import ModelForm
from collection.models import Album
class AlbumForm(ModelForm):
class Meta:
model = Album
exclude = (‘cover’,)
collection/forms.py
from django.forms import ModelForm
from collection.models import Album
class AlbumForm(ModelForm):
class Meta:
model = Album
exclude = (‘cover’,)
collection/forms.py
from django.forms import ModelForm
from collection.models import Album
class AlbumForm(ModelForm):
class Meta:
model = Album
exclude = (‘cover’,)
collection/forms.py
from django.forms import ModelForm
from collection.models import Album
class AlbumForm(ModelForm):
class Meta:
model = Album
exclude = (‘cover’,)
collection/forms.py
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
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
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
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
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
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
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
else:
form = AlbumForm()
return render_to_response('add.html', {'form' :
form}, context_instance=RequestContext(request))
collection/views.py
else:
form = AlbumForm()
return render_to_response('add.html', {'form' :
form}, context_instance=RequestContext(request))
collection/views.py
else:
form = AlbumForm()
return render_to_response('add.html', {'form' :
form}, context_instance=RequestContext(request))
collection/views.py
else:
form = AlbumForm()
return render_to_response('add.html', {'form' :
form}, context_instance=RequestContext(request))
collection/views.py
else:
form = AlbumForm()
return render_to_response('add.html', {'form' :
form}, context_instance=RequestContext(request))
collection/views.py
settings.py
import os
PROJECT_PATH =
os.path.dirname(os.path.abspath(__file__))
TEMPLATE_DIRS = (
os.path.join(PROJECT_PATH, 'templates'),
)
<form action="." method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><button type="submit">Adicionar</button></p>
</form>
templates/add.html
<form action="." method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><button type="submit">Adicionar</button></p>
</form>
templates/add.html
<form action="." method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><button type="submit">Adicionar</button></p>
</form>
templates/add.html
<form action="." method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><button type="submit">Adicionar</button></p>
</form>
templates/add.html
<form action="." method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><button type="submit">Adicionar</button></p>
</form>
templates/add.html
<form action="." method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><button type="submit">Adicionar</button></p>
</form>
templates/add.html
<form action="." method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><button type="submit">Adicionar</button></p>
</form>
templates/add.html
<form action="." method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><button type="submit">Adicionar</button></p>
</form>
templates/add.html
manage.py runserver
/
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
)
urls.py
def index(request):
albums = Album.objects.all().order_by('name')
return render_to_response('index.html', {'albums'
: albums}, context_instance=RequestContext(request))
collection/views.py
def index(request):
albums = Album.objects.all().order_by('name')
return render_to_response('index.html', {'albums'
: albums}, context_instance=RequestContext(request))
collection/views.py
def index(request):
albums = Album.objects.all().order_by('name')
return render_to_response('index.html', {'albums'
: albums}, context_instance=RequestContext(request))
collection/views.py
def index(request):
albums = Album.objects.all().order_by('name')
return render_to_response('index.html', {'albums'
: albums}, context_instance=RequestContext(request))
collection/views.py
def index(request):
albums = Album.objects.all().order_by('name')
return render_to_response('index.html', {'albums'
: albums}, context_instance=RequestContext(request))
collection/views.py
def index(request):
albums = Album.objects.all().order_by('name')
return render_to_response('index.html', {'albums'
: albums}, context_instance=RequestContext(request))
collection/views.py
def index(request):
albums = Album.objects.all().order_by('name')
return render_to_response('index.html', {'albums'
: albums}, context_instance=RequestContext(request))
collection/views.py
{% for album in albums %}
<p>
{% if album.cover %}
<img src="{{album.cover}}" />
{% endif %}
{{album.name}}<br />
{{album.artist}}<br />
</p>
{% endfor %}
templates/index.html
{% for album in albums %}
<p>
{% if album.cover %}
<img src="{{album.cover}}" />
{% endif %}
{{album.name}}<br />
{{album.artist}}<br />
</p>
{% endfor %}
templates/index.html
{% for album in albums %}
<p>
{% if album.cover %}
<img src="{{album.cover}}" />
{% endif %}
{{album.name}}<br />
{{album.artist}}<br />
</p>
{% endfor %}
templates/index.html
{% for album in albums %}
<p>
{% if album.cover %}
<img src="{{album.cover}}" />
{% endif %}
{{album.name}}<br />
{{album.artist}}<br />
</p>
{% endfor %}
templates/index.html
{% for album in albums %}
<p>
{% if album.cover %}
<img src="{{album.cover}}" />
{% endif %}
{{album.name}}<br />
{{album.artist}}<br />
</p>
{% endfor %}
templates/index.html
{% for album in albums %}
<p>
{% if album.cover %}
<img src="{{album.cover}}" />
{% endif %}
{{album.name}}<br />
{{album.artist}}<br />
</p>
{% endfor %}
templates/index.html
delete/
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
url(r'^delete/(?P<album_id>d+)/$',
collection_views.delete,
name='album_delete'),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
url(r'^delete/(?P<album_id>d+)/$',
collection_views.delete,
name='album_delete'),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
url(r'^delete/(?P<album_id>d+)/$',
collection_views.delete,
name='album_delete'),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
url(r'^delete/(?P<album_id>d+)/$',
collection_views.delete,
name='album_delete'),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
url(r'^delete/(?P<album_id>d+)/$',
collection_views.delete,
name='album_delete'),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
url(r'^delete/(?P<album_id>d+)/$',
collection_views.delete,
name='album_delete'),
)
urls.py
from django.conf.urls.defaults import *
from collection import views as collection_views
urlpatterns = patterns('',
url(r'^$', collection_views.index,
name='album_index'),
url(r'^add/$', collection_views.add),
url(r'^delete/(?P<album_id>d+)/$',
collection_views.delete,
name='album_delete'),
)
urls.py
def delete(request, album_id):
album = Album.objects.get(pk=album_id)
album.delete()
return redirect('album_index')
collection/views.py
def delete(request, album_id):
album = Album.objects.get(pk=album_id)
album.delete()
return redirect('album_index')
collection/views.py
def delete(request, album_id):
album = Album.objects.get(pk=album_id)
album.delete()
return redirect('album_index')
collection/views.py
def delete(request, album_id):
album = Album.objects.get(pk=album_id)
album.delete()
return redirect('album_index')
collection/views.py
{% for album in albums %}
<p>
{% if album.cover %}
<img src="{{album.cover}}" />
{% endif %}
{{album.name}}<br />
{{album.artist}}<br />
<a href={% url album_delete album.pk
%}>apagar</a>
</p>
{% endfor %}
templates/index.html
GITHUB.COM/
YURIMALHEIROS
BÁSICO
PYTHON
FERRAMENTA
COMUNIDADE
BOA ESCOLHA :)
DÚVIDAS?

Desenvolvimento web usando django

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 7.
  • 14.
  • 15.
  • 16.
    ” “SE VI MAIS LONGEFOI POR ESTAR SOBRE OS OMBROS DE GIGANTES
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
    DATABASES = { 'default':{ 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'db.sqlite', 'USER': '‘, 'PASSWORD': '‘, 'HOST': '‘, 'PORT': '‘, } } settings.py
  • 26.
  • 27.
  • 28.
    from django.db importmodels 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 importmodels 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 importmodels 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 importmodels 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 importmodels 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 importmodels 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 importmodels 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
  • 35.
  • 36.
  • 37.
  • 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 importModelForm from collection.models import Album class AlbumForm(ModelForm): class Meta: model = Album exclude = (‘cover’,) collection/forms.py
  • 44.
    from django.forms importModelForm from collection.models import Album class AlbumForm(ModelForm): class Meta: model = Album exclude = (‘cover’,) collection/forms.py
  • 45.
    from django.forms importModelForm from collection.models import Album class AlbumForm(ModelForm): class Meta: model = Album exclude = (‘cover’,) collection/forms.py
  • 46.
    from django.forms importModelForm 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
  • 54.
    else: form = AlbumForm() returnrender_to_response('add.html', {'form' : form}, context_instance=RequestContext(request)) collection/views.py
  • 55.
    else: form = AlbumForm() returnrender_to_response('add.html', {'form' : form}, context_instance=RequestContext(request)) collection/views.py
  • 56.
    else: form = AlbumForm() returnrender_to_response('add.html', {'form' : form}, context_instance=RequestContext(request)) collection/views.py
  • 57.
    else: form = AlbumForm() returnrender_to_response('add.html', {'form' : form}, context_instance=RequestContext(request)) collection/views.py
  • 58.
    else: form = AlbumForm() returnrender_to_response('add.html', {'form' : form}, context_instance=RequestContext(request)) collection/views.py
  • 59.
  • 60.
    <form action="." method="post" enctype="multipart/form-data"> {%csrf_token %} {% for field in form %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }}: {{ field }} </div> {% endfor %} <p><button type="submit">Adicionar</button></p> </form> templates/add.html
  • 61.
    <form action="." method="post" enctype="multipart/form-data"> {%csrf_token %} {% for field in form %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }}: {{ field }} </div> {% endfor %} <p><button type="submit">Adicionar</button></p> </form> templates/add.html
  • 62.
    <form action="." method="post" enctype="multipart/form-data"> {%csrf_token %} {% for field in form %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }}: {{ field }} </div> {% endfor %} <p><button type="submit">Adicionar</button></p> </form> templates/add.html
  • 63.
    <form action="." method="post" enctype="multipart/form-data"> {%csrf_token %} {% for field in form %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }}: {{ field }} </div> {% endfor %} <p><button type="submit">Adicionar</button></p> </form> templates/add.html
  • 64.
    <form action="." method="post" enctype="multipart/form-data"> {%csrf_token %} {% for field in form %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }}: {{ field }} </div> {% endfor %} <p><button type="submit">Adicionar</button></p> </form> templates/add.html
  • 65.
    <form action="." method="post" enctype="multipart/form-data"> {%csrf_token %} {% for field in form %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }}: {{ field }} </div> {% endfor %} <p><button type="submit">Adicionar</button></p> </form> templates/add.html
  • 66.
    <form action="." method="post" enctype="multipart/form-data"> {%csrf_token %} {% for field in form %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }}: {{ field }} </div> {% endfor %} <p><button type="submit">Adicionar</button></p> </form> templates/add.html
  • 67.
    <form action="." method="post" enctype="multipart/form-data"> {%csrf_token %} {% for field in form %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }}: {{ field }} </div> {% endfor %} <p><button type="submit">Adicionar</button></p> </form> templates/add.html
  • 68.
  • 70.
  • 71.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), ) urls.py
  • 72.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), ) urls.py
  • 73.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), ) urls.py
  • 74.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), ) urls.py
  • 75.
    def index(request): albums =Album.objects.all().order_by('name') return render_to_response('index.html', {'albums' : albums}, context_instance=RequestContext(request)) collection/views.py
  • 76.
    def index(request): albums =Album.objects.all().order_by('name') return render_to_response('index.html', {'albums' : albums}, context_instance=RequestContext(request)) collection/views.py
  • 77.
    def index(request): albums =Album.objects.all().order_by('name') return render_to_response('index.html', {'albums' : albums}, context_instance=RequestContext(request)) collection/views.py
  • 78.
    def index(request): albums =Album.objects.all().order_by('name') return render_to_response('index.html', {'albums' : albums}, context_instance=RequestContext(request)) collection/views.py
  • 79.
    def index(request): albums =Album.objects.all().order_by('name') return render_to_response('index.html', {'albums' : albums}, context_instance=RequestContext(request)) collection/views.py
  • 80.
    def index(request): albums =Album.objects.all().order_by('name') return render_to_response('index.html', {'albums' : albums}, context_instance=RequestContext(request)) collection/views.py
  • 81.
    def index(request): albums =Album.objects.all().order_by('name') return render_to_response('index.html', {'albums' : albums}, context_instance=RequestContext(request)) collection/views.py
  • 82.
    {% for albumin albums %} <p> {% if album.cover %} <img src="{{album.cover}}" /> {% endif %} {{album.name}}<br /> {{album.artist}}<br /> </p> {% endfor %} templates/index.html
  • 83.
    {% for albumin albums %} <p> {% if album.cover %} <img src="{{album.cover}}" /> {% endif %} {{album.name}}<br /> {{album.artist}}<br /> </p> {% endfor %} templates/index.html
  • 84.
    {% for albumin albums %} <p> {% if album.cover %} <img src="{{album.cover}}" /> {% endif %} {{album.name}}<br /> {{album.artist}}<br /> </p> {% endfor %} templates/index.html
  • 85.
    {% for albumin albums %} <p> {% if album.cover %} <img src="{{album.cover}}" /> {% endif %} {{album.name}}<br /> {{album.artist}}<br /> </p> {% endfor %} templates/index.html
  • 86.
    {% for albumin albums %} <p> {% if album.cover %} <img src="{{album.cover}}" /> {% endif %} {{album.name}}<br /> {{album.artist}}<br /> </p> {% endfor %} templates/index.html
  • 87.
    {% for albumin albums %} <p> {% if album.cover %} <img src="{{album.cover}}" /> {% endif %} {{album.name}}<br /> {{album.artist}}<br /> </p> {% endfor %} templates/index.html
  • 89.
  • 90.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), url(r'^delete/(?P<album_id>d+)/$', collection_views.delete, name='album_delete'), ) urls.py
  • 91.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), url(r'^delete/(?P<album_id>d+)/$', collection_views.delete, name='album_delete'), ) urls.py
  • 92.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), url(r'^delete/(?P<album_id>d+)/$', collection_views.delete, name='album_delete'), ) urls.py
  • 93.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), url(r'^delete/(?P<album_id>d+)/$', collection_views.delete, name='album_delete'), ) urls.py
  • 94.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), url(r'^delete/(?P<album_id>d+)/$', collection_views.delete, name='album_delete'), ) urls.py
  • 95.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), url(r'^delete/(?P<album_id>d+)/$', collection_views.delete, name='album_delete'), ) urls.py
  • 96.
    from django.conf.urls.defaults import* from collection import views as collection_views urlpatterns = patterns('', url(r'^$', collection_views.index, name='album_index'), url(r'^add/$', collection_views.add), url(r'^delete/(?P<album_id>d+)/$', collection_views.delete, name='album_delete'), ) urls.py
  • 97.
    def delete(request, album_id): album= Album.objects.get(pk=album_id) album.delete() return redirect('album_index') collection/views.py
  • 98.
    def delete(request, album_id): album= Album.objects.get(pk=album_id) album.delete() return redirect('album_index') collection/views.py
  • 99.
    def delete(request, album_id): album= Album.objects.get(pk=album_id) album.delete() return redirect('album_index') collection/views.py
  • 100.
    def delete(request, album_id): album= Album.objects.get(pk=album_id) album.delete() return redirect('album_index') collection/views.py
  • 101.
    {% for albumin albums %} <p> {% if album.cover %} <img src="{{album.cover}}" /> {% endif %} {{album.name}}<br /> {{album.artist}}<br /> <a href={% url album_delete album.pk %}>apagar</a> </p> {% endfor %} templates/index.html
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.

Editor's Notes

  • #2 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.
  • #3 Meu nome. Meu twitter. Maneira mais rápida de falar comigo.
  • #4 Email para contato.
  • #5 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.
  • #6 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.
  • #7 É 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.
  • #8 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.
  • #9 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.
  • #10 As pessoas querem tecnologia para usar, uma ferramenta que facilite sua vida. Um artista criando desenhos digitais.
  • #11 Uma professora usando um quadro eletronico, pois é mais fácil apresentar imagens ricar e interagir com elas.
  • #12 Essa máquina facilita infinitamente a colheita. Imaginem fazer tudo manualmente.
  • #13 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.
  • #14 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.
  • #15 Esse é um dos principios do Zen of Python que diz muito. Simples! Eu quero uma ferramenta pra botar minhas ideias em prática.
  • #16 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.
  • #17 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.
  • #18 Django é um framework web escrito em Python. Vou falar bastante dele a partir de agora.
  • #19 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
  • #20 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
  • #23 Vou mostrar um pouco de código
  • #24 Vamos criar uma aplicação para gerenciar uma coleção musical Esse é o comando do django para iniciar um novo projeto.
  • #25 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.
  • #26 Configurando o settings.
  • #27 Comando para criar uma nova aplicação Um projeto django é composto de várias aplicações.
  • #28 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.
  • #29 Como ficou o modelo album
  • #36 Adicionando app no settings
  • #37 Criando tabelas
  • #38 Primeira página: add/ para adicionar um novo album.
  • #39 Configurando o arquivo urls
  • #40 Settings.py
  • #41 Settings.py
  • #42 Settings.py
  • #43 Settings.py
  • #44 Precisamos de um formulário para adicionar algo num site. Vamos criar um.
  • #45 Form de acordo com o modelo.
  • #46 Define o modelo
  • #47 Exclui o campo cover, não quero adicionar a capa manualmente.
  • #48 View para adicionar um novo album
  • #60 Configurações no settings para definir onde ficarão os templates.
  • #61 Template add.
  • #69 Rodando o servidor
  • #70 resultado
  • #71 Proxima página, o index.
  • #72 Adicionando uma url
  • #76 View index
  • #83 Template index
  • #89 resultado
  • #90 Ultima url, deletar.
  • #91 Mais uma url.
  • #92 Settings.py
  • #93 Settings.py
  • #94 Settings.py
  • #95 Settings.py
  • #96 Settings.py
  • #97 Settings.py
  • #98 View delete
  • #103 resultado
  • #104 Resultado com css
  • #105 Vou colocar o código aqui.
  • #106 Vocês viram o basico. Django tem muita mais coisa. A internet tem muito material, vale a pena procurar.
  • #107 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.
  • #108 O Django é uma ótima ferramenta. Ele simplifica muita tarefa chata e agiliza muita coisa tambem.
  • #109 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.
  • #110 Enfim, Django é uma ótima escolha.