Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Sul - Django passo-a-passo

Renata D'Avila
September 08, 2017

Python Sul - Django passo-a-passo

Palestra na Python Sul sobre o passo a passo da criação do EmAula.xyz

=======================
Recursos para aprender mais:
Documentação do Django
https://docs.djangoproject.com/pt-br/1.11/

Tutorial Django Girls
https://tutorial.djangogirls.org/pt/

Effective Django
http://www.effectivedjango.com/

Mozilla Developer Network (MDN)
https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Home_page

Tango With Django
http://www.tangowithdjango.com/

Renata D'Avila

September 08, 2017
Tweet

More Decks by Renata D'Avila

Other Decks in Technology

Transcript

  1. Django passo-a-passo (Como fizemos a criação de um sistema web)

    Este material está licenciado com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
  2. Michele Renata mml88.github.io renatas.xyz Eclética, escritora e apreciadora de músicas,

    acredita que a vida é um eterno aprendizado e que estamos aqui para transcender. Professora de História, ativista pelo software livre e por acesso à cultura e educação sem barreiras. Quem somos “nós”?
  3. Planejamento • Motivações: • Praticidade • Limitação dos recursos disponíveis

    (LMSs e outros) • Escolhas que fizemos: • Software Livre • Python • Django
  4. Software Livre • Quatro liberdades essenciais: • A liberdade de

    executar o programa como você desejar, para qualquer propósito (liberdade 0); • A liberdade de estudar como o programa funciona, e adaptá-lo às suas necessidades (liberdade 1). Para tanto, acesso ao código-fonte é um pré-requisito; • A liberdade de redistribuir cópias de modo que você possa ajudar ao próximo (liberdade 2); • A liberdade de distribuir cópias de suas versões modificadas a outros (liberdade 3). Desta forma, você pode dar a toda comunidade a chance de beneficiar de suas mudanças.
  5. Django • Licença BSD 3-clause, compatível com GPL (Software Livre)

    • Framework para desenvolvimento rápido • Segurança • “Pilhas incluídas” • Django Admin • djangopackages.org
  6. None
  7. Passo 1: Instalação do Django • Documentação do Django https://docs.djangoproject.com/pt-

    br/1.11/topics/install/#installing-official-release • Melhor forma: via pip (gerenciador de pacotes Python) Se for Debian ou Ubuntu, possivelmente terá de atualizar o pip: $ pip install --upgrade pip • Use Python 3!!! $ pip3 install django~=1.11.0
  8. Passo 2: Criação do projeto • O que é um

    projeto? • Coleção de configurações e aplicações para um determinado website. $ django-admin startproject mysite .
  9. Passo 3: Criação da aplicação • O que é uma

    aplicação? Uma aplicação tem apenas a função de fazer alguma coisa • Qual a diferença entre um projeto e uma aplicação? $ python manage.py startapp lessons
  10. Passo 4: O padrão MVT • Models: organizam o armazenamento

    e consulta dos dados no banco; • Views: organizam o ciclo Requisição- Resposta para uma rota; • Templates: formatam a apresentação dos dados.
  11. Passo 5: Criação dos Models • Model: Objeto Python que

    descreve os dados nas tabelas do banco de dados • Campos (fields) dos models são as colunas a serem armazenadas • Relacionamentos no banco de dados: • Um para um (One to One) • Um para muitos (One to Many) • Muitos para Muitos (Many to Many)
  12. class Text(models.Model): classroom = models.ForeignKey(Classroom, related_name='text', on_delete=models.SET_NULL, blank=True, null=True) title

    = models.CharField('Título', max_length=200) text = models.TextField('Texto', blank=True) source = models.URLField('Link para a fonte', blank=True) def __str__(self): return self.title App lessons/models.py
  13. from embed_video.fields import EmbedVideoField from school.models import Classroom class Video(models.Model):

    classroom = models.ForeignKey(Classroom, related_name='video', on_delete=models.SET_NULL, blank=True, null=True) video = EmbedVideoField('Endereço do Youtube') title = models.CharField('Título do vídeo', max_length=1200, blank=True) def __str__(self): return '{0} - {1}'.format(self.title, self.video) App lessons/models.py
  14. None
  15. Passo 6: Rotas • Configuração do urls.py com as expressões

    regulares, para direcionar as requisições apropriadamente • urls.py do projeto vs urls.py da aplicação • Uso de “includes” nas urls do projeto, para incluir (e redirecionar) para as aplicações
  16. from django.conf.urls import include, url from django.contrib import admin from

    django.conf import settings from django.views.generic import RedirectView from django.conf.urls.static import static from django.contrib.auth import views urlpatterns = [ # Redireciona a home para a nossa aplicação: url(r'^$', RedirectView.as_view(url='/school/', permanent=True)), url(r'^admin/', admin.site.urls), url(r'^accounts/', include('django.contrib.auth.urls')), url(r'^accounts/login/$', views.login, name='login'), url(r'^school/', include('school.urls')), url(r'^lessons/', include('lessons.urls')), ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) Projeto website/urls.py
  17. from django.conf.urls import url from . import views app_name =

    'lessons' urlpatterns = [ url(r'^text_list/$', views.TextListView.as_view(), name='text_list'), # == URL Lists == url(r'^$', views.IndexView.as_view(), name='index'), url(r'^video_list/$', views.VideoListView.as_view(), name='video_list'), # == URL details == url(r'^text/(?P<pk>[0-9]+)/$', views.TextDetailView.as_view(), name='text_detail'), url(r'^video/(?P<pk>[0-9]+)/$', views.VideoDetailView.as_view(), name='video_detail'), ] App lessons/urls.py
  18. Passo 7: Criação das Views from django.shortcuts import render, get_object_or_404

    from django.views import generic from .models import Text, Video class IndexView(generic.ListView): template_name = 'lessons/index.html' context_object_name = 'all_lessons_objects' text_list = Text.objects.all() video_list = Video.objects.all() context = { 'text_list': text_list, 'video_list': video_list, } def get_queryset(self): return self.context
  19. class TextListView(generic.ListView): model = Text def get_queryset(self): return Text.objects.all() class

    TextDetailView(generic.DetailView): model = Text def text_detail(request, pk): text = get_object_or_404(Text, pk=pk) return render(request, 'lessons/detail.html', { 'text': text, })
  20. Passo 8: Criação dos Templates • Template base (extensível) •

    Tags Django {% block %} • Personalização de templates Django (admin, registro)
  21. Passo 9: Separação das apps “Se uma app não pode

    ser explicada em uma única frase de tamanho moderado, ou se você precisa dizer 'e' mais de uma vez, provavelmente indica que sua app é grande demais e deve ser dividida.” • Two Scoops of Django, Audrey e Daniel Greefeld • Crie uma nova app: • $ python manage.py startapp school
  22. Passo 10: Repetir a partir do passo 3... • Para

    cada aplicação, criar models, configurar urls, e criar views que direcionam a templates... Imagem original: "Mozilla Contributors" https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Home_page
  23. Cadê o site? https://emaula.xyz Exemplo de aula: https://emaula.xyz/school/classroom/12

  24. E cadê o código? https://github.com/emaula/site

  25. Recursos para aprender mais: • Documentação do Django https://docs.djangoproject.com/pt-br/1.11/ •

    Tutorial Django Girls https://tutorial.djangogirls.org/pt/ • Effective Django http://www.effectivedjango.com/ • Mozilla Developer Network (MDN) https://developer.mozilla.org/en- US/docs/Learn/Server-side/Django/Home_page • Tango With Django http://www.tangowithdjango.com/
  26. ObrigAda! @rsip22