Successfully reported this slideshow.

Workshop Django

1,842 views

Published on

Workshop de Iniciação a Django, uma plataforma web para desenvolvimento de sites utilizando a linguagem de programação Python.

Projecto desenvolvido no workshop: http://jeknowledge.com/media/formacao/django/demo.zip

Published in: Technology
  • Be the first to comment

Workshop Django

  1. 1. Workshop Pedro Gaspar pedro.gaspar@jeknowledge.com Sérgio Santos sergio.santos@jeknowledge.com
  2. 2. www.djangoproject.com www.python.org
  3. 3. Introdução
  4. 4. Arquitectura Clientes <> HTTP <> Servidor
  5. 5. Arquitectura Servidor Web + Browsers Python + Django
  6. 6. Arquitectura Lógica Views Models Templates Objectos Apresentação
  7. 7. Arquitectura Lógica Base de dados Views Models Templates Objectos Apresentação
  8. 8. Base de dados MySQL SQLite Oracle PostgreSQL
  9. 9. Base de dados MySQL SQLite Oracle PostgreSQL
  10. 10. Projecto
  11. 11. “A minha biblioteca”
  12. 12. A minha biblioteca Funcionalidades: • Gestão de livros pessoais • Catalogação de livros • Partilha de listas de livros
  13. 13. Configurações iniciais
  14. 14. Criar projecto django-admin.py startproject demo Criar aplicação manage.py startapp biblioteca # E adicionar demo.biblioteca às INSTALLED_APPS # no ficheiro settings.py
  15. 15. Ficheiro de configuração settings.py: ROOT_PATH = os.path.realpath(os.path.dirname(__file__)) TIME_ZONE = 'Europe/Lisbon ' LANGUAGE_CODE = 'pt-pt' MEDIA_ROOT = os.path.join(ROOT_PATH, 'media/') MEDIA_URL = '/media/' TEMPLATE_DIRS = ( os.path.join(ROOT_PATH, 'templates'), )
  16. 16. Base de dados para SQLite settings.py: DATABASE_ENGINE = 'sqlite3' DATABASE_NAME = 'demo.sqlite3' DATABASE_USER = '' DATABASE_PASSWORD = '' DATABASE_HOST = '' DATABASE_PORT = ''
  17. 17. Iniciar o servidor manage.py runserver [8000] >> http://localhost:8000
  18. 18. Iniciar a shell manage.py shell Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>
  19. 19. Desenvolvimento
  20. 20. Models
  21. 21. Objectos Utilizadores 1 N Categorias N N Livros
  22. 22. Utilizadores (automático) • Username • Last Name • E-mail address • Password • Last Login • Date Joined
  23. 23. Livros • Título • Autor • ISBN • Categorias • Descrição • Link • Dono •…
  24. 24. Categorias • Nome • Descrição •…
  25. 25. Tipos de campos de objectos from django.db import models class NomeDoObjecto(models.Model): nome = models.CharField(max_length=200) data = models.DateTimeField('Data de criação') custo = models.DecimalField(max_digits=9, decimal_places=2)
  26. 26. Tipos de campos de objectos ... email = models.EmailField() comprovativo = models.FileField(upload_to='uploads') foto = models.ImageField(upload_to='imagens') anos = models.IntegerField('Anos de experiência') descricao = models.TextField('Descrição') link = models.URLField(verify_exists=True)
  27. 27. Tipos de campos de objectos ... criador = models.ForeignKey(User, verbose_name='Indivíduo') amigos = models.ManyToManyField(User)
  28. 28. Definir modelos e campos para a biblioteca...
  29. 29. Sincronizar com a base de dados manage.py syncdb
  30. 30. Administração
  31. 31. Adicionar modelos admin.py: from django.contrib import admin from biblioteca.models import * admin.site.register(Categoria) admin.site.register(Livro)
  32. 32. Resultado
  33. 33. Configurar administração admin.py: class LivroAdmin(admin.ModelAdmin): # Campos apresentados na listagem list_display = ('titulo', 'autor', 'dono', 'isbn',) # Campos pesquisáveis search_fields = ('titulo', 'autor', 'descricao') # Ordenar por estes campos ordering = ('titulo',) admin.site.register(Livro, LivroAdmin)
  34. 34. Configurar administração Outras opções: • Remover campos • Alterar a ordem dos campos • Retirar obrigatoriedade de preenchimento • Definir detalhes do layout da página • ...
  35. 35. Views
  36. 36. URLs urls.py: urlpatterns = patterns('', (r'^users/(?P<username>w+)/$', 'biblioteca.views.user_view'), )
  37. 37. URLs urls.py: urlpatterns = patterns('', Variável Tipo de dados (r'^users/(?P<username>w+)/$', 'biblioteca.views.user_view'), Link View ) >> http://localhost:8000/users/xpto
  38. 38. URLs Tipos de dados: w – Caracter alphanumérico d – Número . – Qualquer caracter ou espaço Quantificadores: ? – 0 ou 1 caracter + – 1 ou mais caracteres * - 0 ou mais caracteres
  39. 39. View views.py: @login_required # Obrigar a fazer login Variável def user_view(request, username): user = User.objects.get(username=username) return render(request, 'detalhe_user.html', {'user': user})
  40. 40. Templates
  41. 41. View views.py: def user_view(request, username): user = User.objects.get(username=username) return render(request, Template 'detalhe_user.html', {'user': user})
  42. 42. Template templates/detalhe_user.html: <html> <head><title>Utilizador</title></head> <body> <h1>{{ user }}</h1> <p>Último login em: {{ user.last_login }}</p> </body> </html>
  43. 43. Template >> http://localhost:8000/users/sdsantos
  44. 44. Login urls.py: (r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html', 'redirect_field_name':'/'}), (r'^logout/$', 'django.contrib.auth.views.logout_then_login', {'login_url': '/login/?next=/'}), settings.py: LOGIN_URL = '/login/' LOGIN_REDIRECT_URL = '/'
  45. 45. Login templates/login.html: <h1>Login</h1> <form method="POST" action=""> <table> {{ form.as_table }} </table> <input type="submit" value="Entrar" /> <input type="hidden" name="next" value="{{ next }}" /> </form>
  46. 46. Extend de templates templates/base.html: <html> <head><title>Utilizador</title></head> <body> {% block content %}{% endblock %} </body> </html> templates/other.html: {% extends "base.html" %} {% block content %} <p>O conteúdo a ser inserido no bloco acima</p> {% endblock %}
  47. 47. Outras páginas da aplicação...
  48. 48. Extras(?)

×