SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
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(?)

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jquery
Yuri Costa
 
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
Paulo Damas
 
Desevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQueryDesevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQuery
Guilherme
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)
Carlos Santos
 

Was ist angesagt? (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
 

Andere mochten auch (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
 

Ähnlich wie Workshop Django

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
Charles Kilesse
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodb
Thiago Avelino
 

Ähnlich wie 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
 

Mehr von 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
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Kürzlich hochgeladen (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Workshop Django