SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
Workshop

Pedro Gaspar    pedro.gaspar@jeknowledge.com
Sérgio Santos   sergio.santos@jeknowledge.com
www.djangoproject.com




    www.python.org
Introdução
Arquitectura




Clientes <> HTTP <> Servidor
Arquitectura




             Servidor Web
                   +
Browsers        Python
                   +
                Django
Arquitectura
                          Lógica
                Views




       Models           Templates



Objectos                       Apresentação
Arquitectura
                                   Lógica
Base de dados
                         Views




                Models           Templates



      Objectos                          Apresentação
Base de dados

MySQL      SQLite


Oracle    PostgreSQL
Base de dados

MySQL      SQLite


Oracle    PostgreSQL
Projecto
“A minha biblioteca”
A minha biblioteca

Funcionalidades:
• Gestão de livros pessoais
• Catalogação de livros
• Partilha de listas de livros
Configurações
   iniciais
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
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'), )
Base de dados
                para SQLite


settings.py:
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'demo.sqlite3'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
Iniciar o servidor

manage.py runserver [8000]


>> http://localhost:8000
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)
>>>
Desenvolvimento
Models
Objectos

Utilizadores
    1
                      N   Categorias
           N
                  N
         Livros
Utilizadores
             (automático)


• Username
• Last Name
• E-mail address
• Password
• Last Login
• Date Joined
Livros
• Título
• Autor
• ISBN
• Categorias
• Descrição
• Link
• Dono
•…
Categorias
• Nome
• Descrição
•…
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)
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)
Tipos de campos de objectos

...

criador = models.ForeignKey(User,

                           verbose_name='Indivíduo')



amigos = models.ManyToManyField(User)
Definir modelos e campos
   para a biblioteca...
Sincronizar com a
      base de dados

manage.py syncdb
Administração
Adicionar modelos
admin.py:


from django.contrib import admin
from biblioteca.models import *


admin.site.register(Categoria)


admin.site.register(Livro)
Resultado
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)
Configurar administração
Outras opções:

• Remover campos
• Alterar a ordem dos campos
• Retirar obrigatoriedade de preenchimento
• Definir detalhes do layout da página
• ...
Views
URLs
urls.py:
urlpatterns = patterns('',




(r'^users/(?P<username>w+)/$', 'biblioteca.views.user_view'),


)
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
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
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})
Templates
View

views.py:

def user_view(request, username):
  user = User.objects.get(username=username)
  return render(request,
                                       Template
                'detalhe_user.html',
                {'user': user})
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>
Template
>> http://localhost:8000/users/sdsantos
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 = '/'
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>
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 %}
Outras páginas da
   aplicação...
Extras(?)

Mais conteúdo relacionado

Mais procurados

Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jqueryYuri Costa
 
Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryWesley Lemos
 
Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Loiane Groner
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlPaulo Damas
 
ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryMarketing Digital ODIG
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBLuciano Borges
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajoliCaue Fajoli
 
Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Saulo Vallory
 
Desevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQueryDesevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQueryGuilherme
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webHenrique Gogó
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)Carlos Santos
 
Bloco 5.1 - Manipulação do DOM
Bloco 5.1 - Manipulação do DOMBloco 5.1 - Manipulação do DOM
Bloco 5.1 - Manipulação do DOMRuâni Filipe Silva
 

Mais procurados (20)

Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jquery
 
CSS & JQquery
CSS & JQqueryCSS & JQquery
CSS & JQquery
 
Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQuery
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
 
ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQuery
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê Fajoli
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
Aprenda jQuery 1.3
Aprenda jQuery 1.3Aprenda jQuery 1.3
Aprenda jQuery 1.3
 
Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0
 
JQuery
JQuery JQuery
JQuery
 
Desevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQueryDesevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQuery
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações web
 
Introdução à JQuery
Introdução à JQueryIntrodução à JQuery
Introdução à JQuery
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)
 
Bloco 5.1 - Manipulação do DOM
Bloco 5.1 - Manipulação do DOMBloco 5.1 - Manipulação do DOM
Bloco 5.1 - Manipulação do DOM
 
PowerShell e Active Directory
PowerShell e Active DirectoryPowerShell e Active Directory
PowerShell e Active Directory
 

Destaque

Introducción al Diseño II
Introducción al Diseño IIIntroducción al Diseño II
Introducción al Diseño IIfaadudp
 
Evolución de los seres vivos
Evolución de los seres vivosEvolución de los seres vivos
Evolución de los seres vivosprofemaribel
 
Fundamentos de Game Design para Educadores
Fundamentos de Game Design para EducadoresFundamentos de Game Design para Educadores
Fundamentos de Game Design para EducadoresRoger Tavares
 

Destaque (6)

Introducción al Diseño II
Introducción al Diseño IIIntroducción al Diseño II
Introducción al Diseño II
 
Menos Carbono
Menos CarbonoMenos Carbono
Menos Carbono
 
Imagination
ImaginationImagination
Imagination
 
Evolución de los seres vivos
Evolución de los seres vivosEvolución de los seres vivos
Evolución de los seres vivos
 
Fundamentos de Game Design para Educadores
Fundamentos de Game Design para EducadoresFundamentos de Game Design para Educadores
Fundamentos de Game Design para Educadores
 
Educação em Piraí - parte 4
Educação em Piraí - parte 4Educação em Piraí - parte 4
Educação em Piraí - parte 4
 

Semelhante a Workshop Django

Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Além do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaAlém do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaCharles Kilesse
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodbThiago Avelino
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de djangorosenclever
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
Novidades do Django 1.2
Novidades do Django 1.2Novidades do Django 1.2
Novidades do Django 1.2flavioamieiro
 
Curso ExtJS 4 - Aula 01 - Introdução
Curso ExtJS 4 - Aula 01 - IntroduçãoCurso ExtJS 4 - Aula 01 - Introdução
Curso ExtJS 4 - Aula 01 - IntroduçãoLoiane Groner
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpecguest49d83b2
 
Google Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteGoogle Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteJohann Vivot
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheirasLambda 3
 

Semelhante a Workshop Django (20)

Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Python 07
Python 07Python 07
Python 07
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
TDC 2011 - Ext JS 4
TDC 2011 - Ext JS 4TDC 2011 - Ext JS 4
TDC 2011 - Ext JS 4
 
Além do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaAlém do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completa
 
Python 06
Python 06Python 06
Python 06
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodb
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Novidades do Django 1.2
Novidades do Django 1.2Novidades do Django 1.2
Novidades do Django 1.2
 
Curso ExtJS 4 - Aula 01 - Introdução
Curso ExtJS 4 - Aula 01 - IntroduçãoCurso ExtJS 4 - Aula 01 - Introdução
Curso ExtJS 4 - Aula 01 - Introdução
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpec
 
Google Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteGoogle Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonte
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 

Mais de Sérgio Santos

Launching tech products
Launching tech productsLaunching tech products
Launching tech productsSérgio Santos
 
Simple MongoDB design for Rails apps
Simple MongoDB design for Rails appsSimple MongoDB design for Rails apps
Simple MongoDB design for Rails appsSérgio Santos
 
Ultra fast web development with sinatra
Ultra fast web development with sinatraUltra fast web development with sinatra
Ultra fast web development with sinatraSérgio Santos
 
Agoge - produtividade & multitasking
Agoge - produtividade & multitaskingAgoge - produtividade & multitasking
Agoge - produtividade & multitaskingSérgio Santos
 

Mais de Sérgio Santos (9)

Launching tech products
Launching tech productsLaunching tech products
Launching tech products
 
Simple MongoDB design for Rails apps
Simple MongoDB design for Rails appsSimple MongoDB design for Rails apps
Simple MongoDB design for Rails apps
 
Rails + mongo db
Rails + mongo dbRails + mongo db
Rails + mongo db
 
Ultra fast web development with sinatra
Ultra fast web development with sinatraUltra fast web development with sinatra
Ultra fast web development with sinatra
 
Agoge - produtividade & multitasking
Agoge - produtividade & multitaskingAgoge - produtividade & multitasking
Agoge - produtividade & multitasking
 
Ontologias
OntologiasOntologias
Ontologias
 
Gestão De Projectos
Gestão De ProjectosGestão De Projectos
Gestão De Projectos
 
Django Vs Rails
Django Vs RailsDjango Vs Rails
Django Vs Rails
 
Gestor - Casos De Uso
Gestor - Casos De UsoGestor - Casos De Uso
Gestor - Casos De Uso
 

Workshop Django