TD FabioEduardoThomaz 2007 1
-
Upload
junior-wagner-lopes -
Category
Documents
-
view
224 -
download
0
Transcript of TD FabioEduardoThomaz 2007 1
-
7/26/2019 TD FabioEduardoThomaz 2007 1
1/95
SOCIEDADE EDUCACIONAL DE SANTA CATARINA - SOCIESC
INSTITUTO SUPERIOR TUPY - IST
FABIO EDUARDO THOMAZ
ESTUDO DO FRAMEWORK DJANGO E DA SUA UTILIZAO NO DESENVOLVIMENTO DE
UMA APLICAO WEB PARA O CONTROLE DE ALOCAO DOS PROFESSORES DOINSTITUTO SUPERIOR TUPY
Joinville
2007/1
-
7/26/2019 TD FabioEduardoThomaz 2007 1
2/95
FABIO EDUARDO THOMAZ
ESTUDO DO FRAMEWORK DJANGO E DA SUA UTILIZAO NO DESENVOLVIMENTO DE
UMA APLICAO WEB PARA O CONTROLE DE ALOCAO DOS PROFESSORES DO
INSTITUTO SUPERIOR TUPY
Esse trabalho ser apresentado ao Instituto Supe-rior Tupy como requisito parcial para a obtenode grau de bacharel em Sistemas de Informao,sob orientao do Professor MSc. Marco AndrLopes Mendes.
Joinville
2007/1
-
7/26/2019 TD FabioEduardoThomaz 2007 1
3/95
FABIO EDUARDO THOMAZ
ESTUDO DO FRAMEWORK DJANGO E DA SUA UTILIZAO NO DESENVOLVIMENTO DE
UMA APLICAO WEB PARA O CONTROLE DE ALOCAO DOS PROFESSORES DO
INSTITUTO SUPERIOR TUPY
Esse trabalho foi julgado e aprovado emsua forma final pela banca examinadoraabaixo assinada.
Joinville, 25 de junho de 2007
Prof. MSc. Marco Andr Lopes Mendes
Prof. MSc. Elvis Pftzenreuter
Prof. Esp. Eduardo da Silva
-
7/26/2019 TD FabioEduardoThomaz 2007 1
4/95
THOMAZ, FABIO EDUARDOESTUDO DO FRAMEWORK DJANGO E DA SUA UTILI-
ZAO NO DESENVOLVIMENTO DE UMA APLICAO WEB PARA O CONTROLE
DE ALOCAO DOS PROFESSORES DO INSTITUTO SUPERIOR TUPY
Joinville: SOCIESC, 2007/1.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
5/95
Aos meus pais, a minha noiva Muriel e atodos aqueles que me deram foras paraconcluir mais esta etapa da minha vida
-
7/26/2019 TD FabioEduardoThomaz 2007 1
6/95
AGRADECIMENTOS
Agradeo a Deus por ter me dado foras para chegar at aqui. Agradeo a toda a
minha famlia pelo incentivo constante minha formao acadmica. Agradeo ainda minha
noiva, Muriel Mller, que soube compreender minha ausncia durante o desenvolvimento deste
trabalho e me motivou a seguir em frente nos momentos em que pensei em desistir. Aos meus
tios, Joo Paulo Gesser e Jos Srgio Gesser, que me deram a oportunidade de iniciar a minha
vida profissional. Datasul Tecnologia, por ter me dado um um perodo de frias que auxiliou
na concluso deste trabalho. Aos meus amigos, que sempre mostraram-se dispostos a me
ajudar quando precisei. A todos os professores que j tive, que souberam compartilhar suas
experincias e conhecimentos comigo e com todos os outros alunos. Ao pessoal do grupo
Django Brasil, que ajudaram-me a dirimir dvidas e compartilharam as suas experincias com
o Django.
Aos professores Marco Andr Lopes Mendes, Mehran Misaghi, Sandro Jos de Oliveira
e Eduardo da Silva, que souberam cobrar, instruir, corrigir e motivar o desenvolvimento deste
trabalho.
A todos, muito obrigado.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
7/95
A mente que se abre a uma nova idia jamais voltar ao seu
tamanho original
Albert Einstein
-
7/26/2019 TD FabioEduardoThomaz 2007 1
8/95
RESUMO
Com a crescente necessidade de diminuir prazos no desenvolvimento e elevar a qualidade dasaplicaes desenvolvidas, muitas empresas de desenvolvimento desoftwaree desenvolvedoresindependentes buscam ferramentas que lhes auxiliem durante o processo de desenvolvimento.A proposta do frameworkDjango, que ser apresentado neste trabalho, atender a essasnecessidades. Alm de demostrar as principais funcionalidades do framework, sero aborda-dos alguns conceitos preliminares ao seu aprendizado, como a metodologia MVC, a linguagemPython, HTML, JavaScript, CSS. Ser ainda desenvolvida uma aplicao para controlar a alo-cao de professores de uma instituio de ensino, como um estudo de caso da utilizao doframeworkDjango.
Palavras chave:Django, Python, Programao, Web
-
7/26/2019 TD FabioEduardoThomaz 2007 1
9/95
ABSTRACT
Nowadays, companies and independent developers are always looking for ways to reduce thetime of development and raise the quality of their software applications. They look for tools thathelp the development process. This paper will present the Django Framework, whose purpose isto meet those needs of decreasing the time of development and increase the quality of applica-tion. This paper will present the main features of the framework and some preliminary conceptsas the MVC methodology, Python language, HTML, JavaScript and CSS. An application will alsobe developed to control teacher allocation at a school, as a case study of the use of DjangoFramework.
Keywords:Django, Python, Programming, Web
-
7/26/2019 TD FabioEduardoThomaz 2007 1
10/95
Lista de Figuras
-Figura1 Funcionamento de uma aplicao Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
-Figura2 Fluxo entre as camadas no padro MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
-Figura3 Verificao de palndromo escrito na linguagem Python . . . . . . . . . . . . . . . . . . . . 22
-Figura4 Verificao de palndromo escrito na linguagem C++ . . . . . . . . . . . . . . . . . . . . . . . 23
-Figura5 Verificao de palndromo escrito na linguagem Java . . . . . . . . . . . . . . . . . . . . . . 24
-Figura6 Exemplo de cdigo HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
-Figura7 Documento HTML visualizado no navegador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
-Figura8 Vinculando o evento de clique de um boto a uma funo JavaScript . . . . . . 27
-Figura9 Arquivo style.css . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
-Figura10 Documento HTML utilizando o arquivo style.css . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
-Figura11 Resultados da execuo atravs do modelo CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
-Figura12 Resultados da execuo atravs do mdulo mod_python . . . . . . . . . . . . . . . . . . 31
-Figura13 Comparao de desempenho entre CGI e mod_python . . . . . . . . . . . . . . . . . . . . 31
-Figura14 Tecnologias utilizadas por uma aplicao Web desenvolvida com Django . . 32
-Figura15 Execuo doscriptde instalao do Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
-Figura16 Criao de um projeto com oscript django-admin.py . . . . . . . . . . . . . . . . . . . . . . . 34
-Figura17 Execuo do servidor Web do frameworkDjango . . . . . . . . . . . . . . . . . . . . . . . . . . 35
-Figura18 Acesso ao servidor de desenvolvimento do Django . . . . . . . . . . . . . . . . . . . . . . . . 36
-Figura19 Criao da aplicao Professores com oscriptmanage.py . . . . . . . . . . . . . . . . . 36
-Figura20 Configuraes alteradas para o projeto piramide no arquivo settings.py . . . . 39
-Figura21 Definio do modelo de dados Professor no arquivo models.py . . . . . . . . . . . . 40
-Figura22 Verificao dos modelos de dados com oscriptmanage.py . . . . . . . . . . . . . . . . 41
-Figura23 Verificao dos comandos SQL gerados com base nos modelos de dados . 41
-Figura24 Resultado da execuo doscriptmanage.py com a oposqlall . . . . . . . . . . . 42
-
7/26/2019 TD FabioEduardoThomaz 2007 1
11/95
-Figura 25 Criao das tabelas no banco de dados de acordo com os modelos de dados 42
-Figura26 Definio do modelo Titulao e relacionamento com o modelo Professor . . 43
-Figura27 Relacionamento utilizando parmetrostring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
-Figura28 Inicializao do console interativo do Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
-Figura29 Criao de um registro na tabela Titulao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
-Figura30 Alterao de um registro na tabela Titulao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
-Figura31 Alterao de um registro utilizando o mtodoget() . . . . . . . . . . . . . . . . . . . . . . . . . 47
-Figura32 Consulta a todos os registros da tabela Titulacao com o mtodoall() . . . . . . . 48
-Figura33 Ordenao dos registros de uma consulta com o mtodoorder_by() . . . . . . . 48
-Figura34 Consulta condicional aos registros da tabela Titulacao . . . . . . . . . . . . . . . . . . . . . 49
-Figura35 Utilizao da condiogtena consulta aos registros da tabela Titulacao . . . 49
-Figura36 Ativando a interface de administrao nos modelos de dados . . . . . . . . . . . . . . 52
-Figura37 Configurao para ativar a interface de administrao . . . . . . . . . . . . . . . . . . . . . . 53
-Figura38 Configurao de URL para ativar a interface de administrao . . . . . . . . . . . . . 53
-Figura39 Interface de administrao do Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
-Figura40 Alterao do nome do modelo de dados Titulacao no plural . . . . . . . . . . . . . . . . 54
-Figura41 Pgina principal da interface de administrao do Django . . . . . . . . . . . . . . . . . . 55
-Figura42 Listagem dos registros da tabela Professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
-Figura43 Validao dos campos na insero de um registro na tabela Professor . . . . . 56
-Figura44 Viewdefinida no arquivo views.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
-Figura45 Configurao de URL mapeada para aview datahora_atual . . . . . . . . . . . . . . . 58
-Figura46 Acesso ao endereo relacionado view datahora_atual . . . . . . . . . . . . . . . . . . . 59
-Figura47 Passagem de parmetros pela URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
-Figura48 Parmetros na definio daview datahora_atual . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
-Figura49 Viewpara retornar dados no formato XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
-Figura50 Utilizao de blocos, variveis e contextos emtemplates . . . . . . . . . . . . . . . . . . . 62
-Figura51 Configurao da opo TEMPLATE_DIRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
-
7/26/2019 TD FabioEduardoThomaz 2007 1
12/95
-Figura52 Templatepara listar os registros da tabela Titulacao . . . . . . . . . . . . . . . . . . . . . . . 63
-Figura53 Viewpara listar os registros da tabela Titulacao . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
-Figura54 Configurao da URL para aviewlista_titulacao . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
-Figura55 Lista com os registros da tabela Titulacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
-Figura56 Definio de um formulrio para contato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
-Figura57 Criao do formulrio para cadastro na tabela Professor . . . . . . . . . . . . . . . . . . . 66
-Figura58 Template com o formulrio para cadastro na tabela Professor . . . . . . . . . . . . . . 67
-Figura59 Configurao do servidor Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
-Figura60 Link simblico para os arquivos estticos da interface de administrao . . . . 69
-Figura61 Modelo Entidade Relacionamento do projeto piramide . . . . . . . . . . . . . . . . . . . . . 72
-Figura62 Pgina de acesso aplicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
-Figura63 Pgina inicial da aplicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
-Figura64 Relatrio de carga horria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
-
7/26/2019 TD FabioEduardoThomaz 2007 1
13/95
Lista de Tabelas
-Tabela1 Tipos de campo utilizados no modelo de dados Professor . . . . . . . . . . . . . . . . . . 40
-Tabela2 Tipos de relacionamento disponveis no frameworkDjango . . . . . . . . . . . . . . . . . 43
-Tabela3 Condies de consulta aos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
-Tabela4 Exemplos de expresses regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
-
7/26/2019 TD FabioEduardoThomaz 2007 1
14/95
SUMRIO
1 INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 CONCEITOS PRELIMINARES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1 DESENVOLVIMENTO DE APLICAES PARA A WEB . . . . . . . . . . . . . . . 18
2.2 PADRO DE DESENVOLVIMENTO MVC . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 FRAMEWORK DE DESENVOLVIMENTO DE APLICAES . . . . . . . . . . . . . 21
2.4 LINGUAGEM DE PROGRAMAO PYTHON . . . . . . . . . . . . . . . . . . . . 22
2.5 HYPERTEXT MARKUP LANGUAGE . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.6 LINGUAGEM DE PROGRAMAO JAVASCRIPT . . . . . . . . . . . . . . . . . . 26
2.7 CASCADING STYLE SHEETS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.8 SISTEMA GERENCIADOR DE BANCO DE DADOS MYSQL . . . . . . . . . . . . . 29
2.8.1 MySQLdb - Integrao entre MySQL e Python . . . . . . . . . . . . . . . . . . . . 29
2.9 SERVIDOR WEB APACHE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.9.1 Mdulo Mod_Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.10RELACIONAMENTO ENTRE AS TECNOLOGIAS UTILIZADAS PELO DJANGO . . 31
3 DJANGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1 VISO GERAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2 CARACTERSTICAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3 INSTALAO DO FRAMEWORK DJANGO . . . . . . . . . . . . . . . . . . . . . . 34
3.4 DESENVOLVIMENTO DE UMA APLICAO WEB . . . . . . . . . . . . . . . . . . 34
3.5 CONFIGURAES DO PROJETO . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6 DEFINIO DOS MODELOS DE DADOS . . . . . . . . . . . . . . . . . . . . . . 39
3.7 ACESSO AOS DADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.7.1 Criao e Atualizao de Registros . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.7.2 Consulta ao Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
-
7/26/2019 TD FabioEduardoThomaz 2007 1
15/95
3.7.3 Excluso de Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.8 INTERFACE DE ADMINISTRAO . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.9 VIEWS E CONFIGURAO DAS URLS . . . . . . . . . . . . . . . . . . . . . . . 56
3.9.1 AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.10TEMPLATES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.11MANIPULAO DE FORMULRIOS . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.12PUBLICAO NO SERVIDOR WEB APACHE . . . . . . . . . . . . . . . . . . . . 67
4 ESTUDO DE CASO: APLICAO WEB UTILIZANDO DJANGO . . . . . . . . . . . 70
4.1 VISO GERAL DA APLICAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.2 REQUISITOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.3 NDICE DE TITULAO DO CORPO DOCENTE . . . . . . . . . . . . . . . . . . . 71
4.4 MODELAGEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5 DESENVOLVIMENTO DA APLICAO . . . . . . . . . . . . . . . . . . . . . . . . 72
4.6 RESULTADOS OBTIDOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.7 DIFICULDADES ENCONTRADAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5 CONCLUSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
REFERNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
APNDICE A -- MODELO DE DADOS DA APLICAO PROFESSORES . . . . . . . . 80
APNDICE B -- MODELO DE DADOS DA APLICAO INSTITUIES . . . . . . . . 82
APNDICE C -- MODELO DE DADOS DA APLICAO ALOCAES . . . . . . . . . 83
APNDICE D -- CONFIGURAO DAS URLS . . . . . . . . . . . . . . . . . . . . . . 84
APNDICE E -- LGICA DOS RELATRIOS . . . . . . . . . . . . . . . . . . . . . . . 85
APNDICE F -- TEMPLATE BASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
APNDICE G -- TEMPLATE CARGA HORRIA . . . . . . . . . . . . . . . . . . . . . 92
-
7/26/2019 TD FabioEduardoThomaz 2007 1
16/95
16
1 INTRODUO
H alguns anos a Internet tem sido o foco na estratgia das empresas em busca do
crescimento e da consolidao dos seus negcios. Com isso, a demanda por profissionais com
o conhecimento necessrio para o desenvolvimento de solues Web continua crescendo.
Em funo dessa demanda, necessrio que desenvolvedores e profissionais que pre-
tendem entrar no mercado de desenvolvimento conheam um vasto conjunto de linguagens
de programao, ferramentas e metodologias para o desenvolvimento de aplicaes. Porm,
devido dificuldade de encontrar materiais na lngua portuguesa sobre determinada tecnolo-
gia, muitos acabam perdendo a oportunidade de adquirir novos conhecimentos, pela falta deconhecimentos em outras lnguas, dentre elas e principalmente a lngua inglesa.
Uma das maiores dificuldades das empresas de desenvolvimento de aplicaes aten-
der aos prazos dos clientes, que so cada vez menores. Para conseguir alcanar os prazos,
muitos acabam baixando a qualidade de suas aplicaes, fazendo menos testes do que o ne-
cessrio, implementando funcionalidades importantes sem um estudo adequado e deixando de
documentar o cdigo fonte desenvolvido. Os problemas causados por estas escolhas so o
aumento no nmero de erros na aplicao, insatisfao do cliente, dificuldade de manutenoe retrabalho.
Na tentativa de resolver esses problemas, so utilizados frameworksde desenvolvimento
de aplicaes. Os frameworks fornecem uma estrutura para que o desenvolvimento se torne
mais rpido, organizado e para que o produto desenvolvido possua qualidade e fcil manuten-
o. Umframeworkprocura reunir funcionalidades comuns a vrias aplicaes, de forma que
o desenvolvedor codifique pequenas partes, que pertecem ao domnio de problema especfico
da aplicao.
O Django umframeworkde alto nvel, desenvolvido na linguagem Python, e tem por
objetivo agilizar e facilitar o desenvolvimento de aplicaes Web, sem perder a qualidade e a
organizao do cdigo da aplicao. Esse frameworkautomatiza algumas tarefas que podem
complicar e confundir a linha de raciocnio de um iniciante, alm de estruturar a aplicao em
camadas, conforme a metodologiaModel, View, Controllerconhecida como MVC.
O objetivo deste trabalho realizar um estudo do framework Django, servindo como
referncia no seu aprendizado, reunindo as suas principais funcionalidades e detalhando-as
com exemplos e com o desenvolvimento de uma aplicao exemplo. A aplicao escolhida ser
utilizada para controlar a alocao dos professores de uma instituio de ensino.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
17/95
17
As atividades necessrias para a construo deste trabalho foram desenvolvidas no sis-
tema operacional Linux, com okernelverso 2.6.17.13. A distribuio utilizada foi o Slackware
Linux, verso 10.2. Para o desenvolvimento dos exemplos e da aplicao do estudo de caso,
foi utilizada a reviso 5318 da verso de desenvolvimento do frameworkDjango e a linguagemPython, verso 2.4.1. O navegador Internet utilizado para testar os exemplos e a aplicao de-
senvolvida foi o Firefox, verso 2.0.0.4. O trabalho foi escrito utilizando LATEX com o editor Kile,
verso 1.9.3. Todas as imagens e cdigos disponveis no trabalho que no possuem referncia
foram desenvolvidos pelo autor deste trabalho. Para a criao das imagens, foram utilizados
o Microsoft Visio 2003, no sistema operacional Windows XP, e o editor de imagens GIMP. Os
cdigos dos exemplos e da aplicao foram escritos com o editor de textos Kate, verso 2.5.4.
Este trabalho foi dividido da seguinte forma:No captulo 2 sero abordados conceitos preliminares, nos quais se incluem a arquite-
tura de uma aplicao Web, as tecnologias envolvidas no processo de desenvolvimento de uma
aplicao Web, as aplicaes necessrias para o funcionamento de uma aplicao desenvol-
vida com o frameworkDjango e como estes componentes funcionam em conjunto.
No captulo 3 sero detalhadas as principais caractersticas e funcionalidades do fra-
meworkDjango, desde a sua instalao at o desenvolvimento de uma aplicao Web. Sero
utilizados exemplos que, ao final, faro parte da aplicao desenvolvida no estudo de caso.
No captulo 4 ser apresentado o estudo de caso do desenvolvimento de uma aplicao
para a alocao de professores em uma instituio de ensino. Sero apresentados os requi-
sitos da aplicao, a modelagem das tabelas identificadas e a aplicao desenvolvida com o
frameworkDjango.
Finalizando o trabalho, sero apresentadas as concluses, incluindo as principais vanta-
gens e as dificuldades encontradas durante o desenvolvimento da aplicao com o framework
Django. Sero apresentadas tambm algumas sugestes para trabalhos futuros.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
18/95
18
2 CONCEITOS PRELIMINARES
Este captulo apresenta a arquitetura de uma aplicao Web, as tecnologias envolvi-das no processo de desenvolvimento de uma aplicao Web, as aplicaes necessrias para o
funcionamento de uma aplicao desenvolvida com oframeworkDjango e como esses compo-
nentes funcionam em conjunto.
2.1 DESENVOLVIMENTO DE APLICAES PARA A WEB
No incio da Internet, todo o contedo existente na rede mundial de computadores eraesttico, ou seja, os documentos eram escritos manualmente e publicados nos servidores liga-
dos Internet, sem que houvesse uma atualizao automtica do seu contedo. Com o passar
do tempo, a necessidade de atualizao do contedo publicado aumentou, fazendo com que
surgissem tecnologias para atender a necessidade da disponibilizao de contedo de forma
dinmica. Essa mudana fez com que simples documentos formatados se tornassem verdadei-
ras aplicaes, exibindo aos usurios dados armazenados em banco de dados e permitindo a
sua manipulaoon-line.
Com o desenvolvimento dessas tecnologias, aplicaes que antes eram executadas em
um ambiente local, passaram a ser reescritas para que fosse possvel execut-las via Internet.
As vantagens da mudana incluem mobilidade, simplificao da infra-estrutura antes necessria
para que empresas com diversas filiais pudessem utilizar a mesma aplicao, facilidade de atu-
alizao das aplicaes, j que no necessria a sua instalao na estao de cada usurio,
entre outras. Porm, a tarefa do desenvolvedor passou a contar com detalhes que no existiam
nas aplicaes com execuo local.
De acordo com (PRESSMAN, 2006), as aplicaes Web "envolvem uma mistura de publi-
cao impressa e desenvolvimento de aplicaes, de comercializao e computao, de comu-
nicaes internas e relaes externas, e de arte e tecnologia".
As seguintes caractersticas so encontradas na grande maioria das aplicaes Web
(PRESSMAN,2006):
I. a interface da aplicao com o usurio exibida em um browser, tambm chamado de
navegador Internet;
-
7/26/2019 TD FabioEduardoThomaz 2007 1
19/95
19
II. as requisies enviadas pelo usurio atravs da interface so tratadas por um servidor
Web;
III. um grande nmero de usurios pode acessar a aplicao Web ao mesmo tempo;
IV. a quantidade de acessos aplicao Web pode mudar completamente entre um dia e
outro;
V. os usurios querem acesso na base de "24/7/365", ou seja, 24 horas por dia, 7 dias
por semana e 365 dias por ano, devido a diferena de fuso horrio entre os usurios da
aplicao, que podem estar em qualquer lugar do mundo;
VI. a evoluo da aplicao Web no se d por meio de verses planejadas e cronologica-
mente espaadas, e sim continuamente;
VII. necessidade de colocao no mercado rapidamente;
VIII. dificuldade em limitar a populao de usurios que podem ter acesso a uma aplicao
Web, sendo necessria a utilizao de fortes medidas de segurana em toda a infra-
estrutura que apia uma aplicao Web;
IX. a esttica possui grande influncia no sucesso da aplicao.
Durante a utilizao de uma aplicao Web, o usurio envia diversas requisies ao
servidor, seja para informar os dados da sua identificao, para acessar um modulo da aplicao
ou para alterar alguma informao disponvel na aplicao. O servidor Web, ao receber essas
requisies, identifica o que deve fazer com as mesmas. Caso seja necessria a execuo
de algum programa para a gerao de contedo dinmico, o servidor acessa a instncia deste
programa, enviando as informaes necessrias para a gerao do contedo e, ao receber o
retorno, encaminha o contedo ao usurio que disparou a requisio. A figura 1exemplifica ofuncionamento de uma aplicao Web:
Figura 1: Funcionamento de uma aplicao Web
-
7/26/2019 TD FabioEduardoThomaz 2007 1
20/95
20
2.2 PADRO DE DESENVOLVIMENTO MVC
A MVC, sigla para os termo em ingls Model, View, Controller, significa Modelo, Visu-
alizao e Controlador. um padro de desenvolvimento que sugere a separao do cdigofonte da aplicao em trs partes, tambm conhecidas por camadas, onde cada camada res-
ponsvel por tarefas especficas, facilitando o desenvolvimento e a manuteno do cdigo da
aplicao.
Figura 2: Fluxo entre as camadas no padro MVC
Fonte: Adaptado de (THOMAS; HANSSON, 2007)
A camada de Modelo responsvel por realizar a interface entre o banco de dados e a
aplicao. Nesta camada, so desenvolvidas todas as regras de negcio que se aplicam aos
dados, garantindo que nenhum objeto da aplicao efetue uma alterao com valores invlidos
no banco de dados (THOMAS; HANSSON, 2007). Por exemplo, em uma aplicao para vendas,
se existe uma regra de negcio que fornece 10% de desconto nos produtos vendidos vista,
a camada de Modelo pode realizar uma verificao no valor antes deste ser armazenado no
banco de dados, garantindo que o desconto seja aplicado.A camada de Visualizao responsvel por exibir a interface para o usurio, permitindo
que este possa realizar a entrada de dados e a execuo de operaes. O padro sugere que
nesta camada no sejam implementadas regras de negcio da aplicao, visando facilitar a
manuteno e organizar o cdigo fonte.
A camada do Controlador responsvel por tratar as entradas e requisies do usurio,
interagir com os objetos da camada de Modelo e retornar os objetos de visualizao apropriados
ao usurio. O padro MVC sugere que todo o fluxo passe pelo Controlador, sendo que umobjeto da camada de visualizao no deve interagir com os objetos da camada de modelo
diretamente.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
21/95
21
2.3 FRAMEWORK DE DESENVOLVIMENTO DE APLICAES
Um frameworkde desenvolvimento de aplicaes uma estrutura de suporte definida
para que outros projetos desoftwarepossam ser organizados e desenvolvidos. Geralmente, umframeworkpossui programas de apoio, bibliotecas de classes, colaborao entre os objetos,
scriptse outras ferramentas para auxiliar o desenvolvedor no processo de desenvolvimento
(WIKIPEDIA,2006).
Um frameworkprocura reunir funcionalidades comuns a vrias aplicaes, de forma
que o desenvolvedor codifique pequenas partes, que pertecem ao domnio de problema espe-
cfico da aplicao. Em uma aplicao Web baseada no padro MVC, a comunicao entre
os objetos da visualizao, do controlador e do modelo semelhante, independente do dom-nio de problema da aplicao. Portanto, um frameworkpara o desenvolvimento de aplicaes
Web baseadas no padro MVC pode oferecer um conjunto de funcionalidades que facilitariam
o processo de desenvolvimento, deixando para o programador a tarefa de codificar a lgica de
negcio especfica da aplicao.
A utilizao de umframeworkno processo de desenvolvimento de aplicaes traz vrias
vantagens, tais como(SAUV,2003):
I. maximizao do re-uso;
II. diminuio do tempo de desenvolvimento;
III. reduo de custos;
IV. estabilizao do cdigo, devido ao uso em vrias aplicaes;
V. desenvolvimento voltado a adicionar valor aplicao;
VI. melhor consistncia e compatibilidade entre aplicaes;
VII. diminuio e facilidade de manuteno.
A principal diferena entre umframeworke uma biblioteca de classes que oframework
deve fornecer a colaborao entre os objetos, enquanto a biblioteca de classes fornece apenas
os objetos para a utilizao. Colaborao entre os objetos significa que os objetos utilizados
pelo frameworkpossuem uma seqencia de execuo. O desenvolvedor no precisa saber
quando chamar cada mtodo. O prprio frameworkrealiza este trabalho (SAUV,2003).
-
7/26/2019 TD FabioEduardoThomaz 2007 1
22/95
22
2.4 LINGUAGEM DE PROGRAMAO PYTHON
Python uma linguagem de programao orientada objetos desenvolvida por Guido
van Rossum em meados da dcada de 1990, nos laboratrios da CWI, o Instituto Nacionalde Pesquisa em Matemtica e Cincia da Computao, localizado em Amsterd (DEITEL et al.,
2002).
Devido a algumas de suas caractersticas, como a sintaxe simples e o alto nvel de abs-
trao, a linguagem Python tem ganhado espao nas disciplinas introdutrias de programao
das instituies de ensino superior, onde o foco ensinar aos alunos o raciocnio lgico da
programao, sem perder tempo com os detalhes da tecnologia utilizada.
Um exemplo da utilizao da linguagem Python pode ser visto no cdigo de um pro-
grama para a verificao de palndromos. Um palndromo uma palavra ou frase que pode ser
lida tanto da direita para a esquerda como da esquerda para a direita. Nos palndromos normal-
mente so desconsiderados os sinais ortogrficos e os espaos entre as palavras ( WIKIPEDIA,
2007a). O programa para a verificao de palndromos deve receber a palavra ou frase digitada
pelo usurio, remover os espaos entre as palavras, alterar o texto para conter apenas letras
minsculas, para que as letras maisculas no interfiram na comparao, inverter o texto e com-
parar com o original, verificando se o texto informado um palndromo ou no. Este exemplo
foi escolhido para apresentar o uso da manipulao de strings, uma prtica muito utilizada no
desenvolvimento de aplicaes.
O exemplo seguir mostra o cdigo do programa escrito na linguagem Python:
1 # c od i ng : l a t i n 1
2 de f isPal indro mo ( l i nh a ) :
3 l i n h a = l i n h a . r e p l ac e ( " ", "" ) . lowe r ()
4 return ( l i n h a == l i n h a [ : : 1 ] )
6 p r i n t "VERIFICAO DE PALNDROMOS"
7 l i n h a = r a w _ in p ut ( "Digite a palavra ou frase (sem acentuao): " )
8 i f isPal indromo ( l i nh a ) :
9 p r i n t " palndromo"
10 else:
11 p r i n t "No palndromo"
Figura 3: Verificao de palndromo escrito na linguagem Python
-
7/26/2019 TD FabioEduardoThomaz 2007 1
23/95
23
O cdigo do programa contm apenas o que o programa deve fazer, ou seja, solicitar a
entrada do usurio, remover os espaos em branco, passar todo o texto para letra minscula e
realizar a comparao do texto informado com o texto invertido. O mesmo programa, escrito na
linguagem C++, ficaria conforme a figura4.
1 #include < iostream>
2 #include < s t r i n g >
3 using namespace std ;
5 bool i s Pa l i nd r om o ( s t r i n g l i n h a ) {
6 s t r i n g : : s i z e _t y p e i n de x ;
7 s t r i n g a u x i l i a r ;
8 fo r (i n t i = 0 ; i < l i n h a . l e n gt h ( ) ; i + +) {
9 l i n h a [ i ] = t o l o we r ( l i n h a [ i ] ) ;
10 }
11 i n de x = l i n h a . f i n d ( " ", 0 ) ;
12 while ( i n de x ! = s t r i n g : : npos ) {
13 l i nh a . replace ( index ,1 , "" ) ;
14 i n de x = l i n h a . f i n d ( " ", i nd ex + 1 ) ;
15 }
16 a u x i l i a r = l i nh a ;
17 r e v e r s e ( a u x i l i a r . b e gi n ( ) , a u x i l i a r . e nd ( ) ) ;18 return ( a u x i l i a r == l i n h a ) ;
19 }
20 i n t main ( ) {
21 char i n p u t [ 1 0 0 ] ;
22 s t r i n g l i n h a ;
23 cout
-
7/26/2019 TD FabioEduardoThomaz 2007 1
24/95
24
A linguagem C++ requer que o programa esteja dentro de uma funo. Alm disso,
necessria a incluso das bibliotecas iostreame string. As chaves e os ponto-e-vrgula so
parte da liguagem. Na linguagem Java, todo cdigo deve estar dentro de uma classe, conforme
a figura5.
1 import jav a . io . Buffere dReader ;
2 import jav a . io . IOExc epti on ;
3 import jav a . io . InputStreamReader ;
4 public class Pal indromo {
5 sta t ic boolean i s P a l i n dr o m o ( S t r i n g l i n h a ) {
6 S t r i ng B u f fe r a u x i l i a r ;
7 l i n h a = l i n h a . r e p la c e ( " ", "" ) . toLowerCase () ;
8 a u x i l i a r = new S t r i n g B u f f e r ( l i n h a ) ;
9 return l i nh a . equals ( au xi l i ar . reverse ( ) . to St r i ng ( ) ) ;
10 }
11 p ub li c s t a t i c v oi d main( Str ing argv [ ] ) {
12 Buf feredReader inp ut ;
13 i n p ut = new BufferedReader (new InputStreamReade r ( System. in ) ) ;
14 S t r i n g l i n h a ;
15 System. out . p r i n t l n ( "VERIFICAO DE PALNDROMOS" ) ;
16 t r y {
17 System. out . p r i n t ( "Digite a palavra ou frase (sem acentuao): " ) ;18 l i n h a = i n p u t . r e a d Li n e ( ) ;
19 i f ( Pal indromo . isPal indromo ( l i nh a ) ) {
20 System . out . pr i nt ln ( " palndromo" ) ;
21 } else {
22 System . out . pr i nt ln ( "No palndromo" ) ;
23 }
24 inp ut . c lose ( ) ;
25 } catch ( I O Ex c e pt i o n e ) {
26 System. er r . p r i n t l n (e . getMessage ( ) ) ;27 }
28 }
29 }
Figura 5: Verificao de palndromo escrito na linguagem Java
A linguagem Python permite a utilizao de funes e classes, mas no fora o progra-
mador a utiliz-las(ZELLE, 1999).
-
7/26/2019 TD FabioEduardoThomaz 2007 1
25/95
25
Outra caracterstica que torna a linguagem Python mais didtica a tipagem dinmica
das variveis. O programador no obrigado a definir o tipo da varivel antes de utiliz-la.
A prpria linguagem entende o tipo do valor que o programador deseja associar varivel e
determina o seu tipo, dinamicamente.
De acordo com (DEITEL et al., 2002), a linguagem Python oferece uma srie de vantagens,
citadas seguir:
I. uma linguagem excelente para iniciantes em programao e para o desenvolvimento de
aplicaes comerciais;
II. foi desenvolvida com o objetivo de ser portvel e extensvel;
III. a sua sintaxe promove o uso de boas prticas de programao;
IV. diminui o tempo utilizado no desenvolvimento de aplicaes sem ignorar questes impor-
tantes para a manuteno das mesmas.
2.5 HYPERTEXT MARKUP LANGUAGE
Uma pgina Web composta basicamente por texto e uma srie de marcaes (tambmconhecidas comotags) da linguagem HTML, que so utilizadas para estruturar e formatar o con-
tedo da pgina e criar ligaes entre vrias pginas diferentes. A sigla HTML um acrnimo
para Hypertext Markup Language, que significa Linguagem de Marcao de Hipertexto. Os
elementos da linguagem HTML so definidos pelo W3C Consortium, um instituto responsvel
por manter os padres de algumas das tecnologias utilizadas no desenvolvimento de aplica-
es Web. Quando uma pgina Web carregada por um navegador Internet, o cdigo HTML
da pgina interpretado e o contedo exibido ao usurio, de acordo com as marcaes de
formatao definidas no cdigo.
A figura6mostra o cdigo-fonte com as marcaes HTML.
1
2
3 Exemplo de um < i >documento HTML
4 < /body>
5 < /html>
Figura 6: Exemplo de cdigo HTML
-
7/26/2019 TD FabioEduardoThomaz 2007 1
26/95
26
A figura7mostra o documento interpretado e visualizado pelo navegador.
Figura 7: Documento HTML visualizado no navegador
A marcao define o incio de um documento HTML. J a marcao
define o incio do corpo do documento. As marcaes iniciadas com
-
7/26/2019 TD FabioEduardoThomaz 2007 1
27/95
27
1
2 < s c ri p t t yp e="text/javascript">
3 f u n c t i o n m y_ o nc l ic k ( ) {
4 . . .
5 }
6 document. form . mybutton . on cl ic k = my_onclick
7 < /s c r i p t >
8 < /button>
Figura 8: Vinculando o evento de clique de um boto a uma funo JavaScript
Fonte: (W3C, 1999b)
Segundo (GALDINO, 2006), a linguagem JavaScript foi criada para pequenos processa-
mentos. Por este motivo, foi muito utilizada para acrescentar recursos simples pgina, s ve-
zes banais. Esse uso o que a faz ser lembrada como uma extenso do HTML e no como uma
linguagem de fato. Porm, segundo o mesmo autor, a JavaScript uma linguagem completa
e poderosa, com as limitaes que o meio exige. A sua principal utilizao est relacionada
manipulao dos elementos da pgina HTML.
Um dos maiores problemas na utilizao da linguagem JavaScript est relacionado aos
diferentes interpretadores existentes. Alguns navegadores possuem comandos JavaScript es-
pecficos, fazendo com que uma pgina desenvolvida utilizando estes comandos deixe de fun-
cionar corretamente em um navegador diferente.
Visando diminuir este problema, a European Computer Manufacturers Association (ECMA)
criou a especificao ECMAScript, para padronizar a linguagem JavaScript. Os scripts criados
de acordo com os padres definidos no ECMAScript devem funcionar de forma idntica em
qualquer navegador que implemente estas especificaes.
2.7 CASCADING STYLE SHEETS
CSS a sigla para Cascading Style Sheets, que significa Folha de Estilos em Cascata.
uma linguagem para estilos que define a disposio de documentos HTML (SILVA,2007).
Embora seja possvel definir cores, fontes, posicionamento, e outros atributos relaciona-
dos com o estilo do documento utilizando a linguagem HTML, a utilizao do CSS proporciona
ao desenvolvedor vrias facilidades, centralizando todas as definies relacionadas ao estilo do
-
7/26/2019 TD FabioEduardoThomaz 2007 1
28/95
28
documento. A correta utilizao do CSS permite que o desenvolvedor mude o estilo de uma
aplicao Web por completo em poucos minutos.
A figuras9mostra um exemplo de um arquivo CSS.
1 body {
2 backgroundco lo r : #FF0000 ;
3 }
Figura 9: Arquivo style.css
Fonte: (SILVA, 2007)
A figura10mostra a utilizao do CSS em um documento HTML, atravs do mtodo de
link.
1
2
3 < t i t l e >Meu documento< /t i t l e >
4 < l in k r e l="stylesheet" type="text/css" href="style.css" / >
5 < /head>6
7 Minha p r i m ei r a f o l h a de e s t i l o s < / h1>
8 < /body>
9 < /html>
Figura 10: Documento HTML utilizando o arquivo style.css
Fonte: (SILVA, 2007)
O mtodo de link o recomendado para a utilizao de CSS, devido possibilidade
de centralizar a definio dos estilos em arquivos e utiliz-los em diversos documentos HTML.
Desta forma, a alterao de uma propriedade nos arquivos CSS far com que todos os docu-
mentos HTML que os utilizem sejam modificados.
Uma boa referncia na lngua portuguesa sobre a utilizao de CSS pode ser encontrada
em (SILVA, 2007).
-
7/26/2019 TD FabioEduardoThomaz 2007 1
29/95
29
2.8 SISTEMA GERENCIADOR DE BANCO DE DADOS MYSQL
O MySQL um SGBD (Sistema Gerenciador de Banco de Dados) de cdigo aberto
muito utilizado por aplicaes Web, em virtude de algumas de suas caractersticas como velo-cidade e facilidade de gerenciamento. O MySQL desenvolvido e distribudo pela MySQL AB,
uma empresa fundada pelos desenvolvedores do MySQL. (MYSQL AB, 2007)
Neste trabalho, o MySQL ser utilizado para armazenar os dados da aplicao desen-
volvida com o frameworkDjango no estudo de caso.
Os detalhes sobre a instalao e a utilizao da verso 5.1 do MySQL podem ser obtidos
no manual de referncia da ferramenta, disponvel em(MYSQL AB,2007).
2.8.1 MySQLdb - Integrao entre MySQL e Python
Para que seja possvel utilizar o banco de dados MySQL atravs da linguagem Python,
necessria a instalao de um pacote de programas chamado de MySQLdb. Este pacote
fornece um conjunto de classes que possibilitam a conexo entre um programa escrito na lin-
guagem Python e um banco de dados armazenado no MySQL.
Alm de possibilitar a conexo, as classes disponveis no pacote MySQLdb permitemque os programas escritos na linguagem Python possam interagir com os dados armazenados
no banco de dados MySQL, seja consultando, inserindo, atualizando ou eliminando dados.
2.9 SERVIDOR WEB APACHE
Segundo o (WIKIPEDIA, 2007b), podemos chamar de Servidor Web tanto o hardware
como o programa responsvel por aceitar requisies HTTP e respond-las (THE INTERNET SO-
CIETY, 1999). O HTTP, sigla para o termo Hypertext Transfer Protocol, um protocolo de nvel
de aplicao utilizado para enviar e receber dados na Internet. A sua ltima verso foi definida
pela RFC 2616, disponvel em (THE INTERNET SOCIETY, 1999).
O Apache um servidor Web atualmente mantido por um grupo de voluntrios espalha-
dos pelo mundo, que utilizam a Internet para se comunicar, planejar e desenvolver o servidor e
toda a documentao relacionada (APACHE SOFTWARE FOUNDATION,2007). Atualmente, o ser-
vidor Web mais utilizado no mundo, possuindo cerca de 58% do mercado de servidores Web,
de acordo com os dados da Netcraft(NETCRAFT,2007).
-
7/26/2019 TD FabioEduardoThomaz 2007 1
30/95
30
Dentre as suas principais caractersticas, se destaca o fato de ser uma aplicao mul-
tiplataforma, possuir um bom desempenho, robustez e flexibilidade (BAREINBOIM,2006). A fle-
xibilidade do Apache permite que sejam desenvolvidos mdulos para tratar de requisies que
necessitam de processamento por uma tecnologia externa, como aplicaes escritas nas lin-guagens PHP, Python, Ruby, entre outras.
Para que o Apache possa ser o servidor Web de uma aplicao desenvolvida com o
frameworkDjango, necessria a utilizao do mdulo mod_python, explicado a seguir.
2.9.1 Mdulo Mod_Python
Existem trs formas de se executar um cdigo Python atravs do Apache. A primeira atravs do modelo CGI, sigla para o termo Commom Gateway Interface, onde cada requisio
inicializa um processo do interpretador Python e redireciona a sua sada padro para o navega-
dor do usurio. A segunda atravs do redirecionamento da requisio para um outro servidor
Web, que executado em paralelo ao Apache. A terceira e melhor forma de executar um cdigo
Python atravs do Apache utilizando o mdulo mod_python (TRUBETSKOY, 2003).
O mod_python um mdulo para o servidor Web Apache que permite a comunicao do
Apache com o interpretador da linguagem Python. Quando o Apache iniciado, uma instncia
do interpretador Python alocado na memria do servidor, fazendo com que a cada execuo
de um cdigo Python no seja necessrio inicializar o interpretador. Este modelo faz com que
seja aproveitada a habilidade do Apache em tratar as requisies, deixando para o interpretador
Python somente a execuo do cdigo necessrio.
Testes de desempenho constataram a vantagem da utilizao do mod_python com re-
lao ao modelo CGI. A figura11 mostra os resultados de 1000 execues de um programa
atravs do modelo CGI, utilizando 10 conexes:
(mean time, across all concurrent requests)
Time per request: 77.723 [ms]
Figura 11: Resultados da execuo atravs do modelo CGI
Fonte:(DRAKE,2005)
-
7/26/2019 TD FabioEduardoThomaz 2007 1
31/95
31
A figura12mostra os resultados de 1000 execues de um programa equivalente ao
executado nos testes com CGI, porm em um ambiente com o mdulo mod_python, utilizando
10 conexes:
(mean time, across all concurrent requests)
Time per request: 5.808 [ms]
Figura 12: Resultados da execuo atravs do mdulo mod_python
Fonte:(DRAKE,2005)
A figura13apresenta um grfico comparativo do desempenho na execuo das requisi-es utilizando CGI e mod_python.
Figura 13: Comparao de desempenho entre CGI e mod_python
Atravs desta comparao, fica evidente a vantagem de se utilizar o mdulo mod_python
para a execuo de programas Python junto ao servidor Web Apache.
2.10 RELACIONAMENTO ENTRE AS TECNOLOGIAS UTILIZADAS PELO DJANGO
Todas as tecnologias vistas neste captulo so importantes para entender o funciona-
mento de uma aplicao Web desenvolvida com oframeworkDjango. A figura14mostra como
-
7/26/2019 TD FabioEduardoThomaz 2007 1
32/95
32
essas tecnologias relacionam-se durante a execuo de uma aplicao Web desenvolvida com
Django.
Figura 14: Tecnologias utilizadas por uma aplicao Web desenvolvida com Django
Os usurios, com a utilizao dos navegadores, disparam requisies na Internet que
so tratadas pelo servidor Web. O servidor Web Apache verifica se a requisio necessita
de processamento Python e utiliza o mdulo mod_python. O mdulo faz a comunicao com
o Python, que utiliza os mdulos do Django para realizar o processamento. Caso haja a ne-
cessidade de comunicao com o SGBD, o Python utiliza o mdulo MySQLdb para realizar
a comunicao com o SGBD MySQL. Aps processada, a requisio devolvida ao servidor
Apache, que encaminha a resposta aos usurios.
Vale lembrar que as tecnologias utilizadas neste trabalho foram escolhidas de modo
a facilitar o ensino do framework Django. Segundo (HOLOVATY; MOSS, 2006), a utilizao do
servidor Web Apache juntamente com o mdulo mod_python atualmente a configurao mais
robusta para utilizar o Django em um servidor de produo. A escolha do sistema gerenciador
de banco de dados MySQL foi motivada pela sua reputao como banco de dados de aplicaes
Web que exigem grande nmero de conexes e velocidade no acesso aos dados, alm da
grande quantidade de material disponvel para consulta na Internet sobre a sua utilizao.
Porm, caso haja a necessidade, possvel utilizar outras tecnologias, como por exem-
plo o PostgreSQL como sistema gerenciador de banco de dados ou o lighttpd juntamente com
o FastCGI como servidor Web.
O prximo captulo apresentar as caractersticas e principais funcionalidades do fra-
meworkDjango. No decorrer da explicao, sero apresentados exemplos de utilizao de
cada funcionalidade.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
33/95
33
3 DJANGO
Este captulo tem por objetivo detalhar as principais caractersticas e funcionalidadesdoframeworkDjango. A maior parte deste captulo foi construda de acordo com as informa-
es contidas na documentao oficial do projeto Django e no Django Book, livro em fase de
desenvolvimento escrito pelos criadores do framework.
3.1 VISO GERAL
O Django um frameworkde desenvolvimento de aplicaes Web criado por AdrianHolovaty e Simon Willison, no ano de 2003. Na poca, ambos eram programadores do jornal
The Lawrence Journal-World, da cidade de Lawrence, localizada no estado do Kansas, nos
Estados Unidos da Amrica. Dois anos mais tarde, em julho de 2005, quando o desenvolvedor
Jacob Kaplan-Moss tambm fazia parte da equipe de desenvolvimento do Django, os seus
criadores resolveram liberar oframeworkpara a comunidade open-source.
O Django foi desenvolvido com o objetivo de facilitar o desenvolvimento de web sites
dinmicos, para que fosse possvel desenvolver pginas com a qualidade e a velocidade exi-
gidas em uma empresa de jornalismo. O objetivo do desenvolvimento foi resolver problemas
encontrados no dia-a-dia dos desenvolvedores do jornalThe Lawrence Journal-World.
Atualmente, vrios sitesdesenvolvidos com o framework Django esto em funciona-
mento na Internet. O jornal Washington Post, por exemplo, desenvolveu vrios sitespara as-
suntos especficos utilizando o Django. Uma lista de sitese aplicaes desenvolvidos com o
frameworkDjango pode ser visualizada em (DJANGO SOURCE CODE, 2007).
3.2 CARACTERSTICAS
O frameworkDjango possui uma srie de caractersticas que o destacam no que diz
respeito ao desenvolvimento de aplicaes Web:
I. aplicaes desenvolvidas com o Django seguem a arquitetura MVC;
II. automatizao de algumas tarefas do processo de desenvolvimento;
III. reduo do tempo necessrio para a construo da aplicao;
-
7/26/2019 TD FabioEduardoThomaz 2007 1
34/95
34
IV. mantm o desenvolvedor com o foco nas particularidades do negcio da aplicao;
V. possui uma forma de mapear as URLs requisitadas para os programas que tratam as
requisies;
VI. uma ferramenta de cdigo aberto;
VII. possui comunicao com vrios SGBDs.
3.3 INSTALAO DO FRAMEWORK DJANGO
A instalao doframeworkDjango simples e rpida. O nico requisito que o sistema
onde o Django ser instalado possua a linguagem Python na verso 2.3 ou superior.
Para instalar o Django, necessrio baixar o arquivo de instalao, que pode ser encon-
trado no siteoficial do projeto, disponvel em(LAWRENCE JOURNAL-WORLD, 2007). Aps baixar
o arquivo e descompact-lo, basta executar oscriptde instalao setup.py, com a opoinstall,
conforme o exemplo a seguir:
python setup.py install
Figura 15: Execuo doscriptde instalao do Django
A instalao cria o diretrio Django abaixo do diretrio site-packages, localizado no di-
retrio de instalao do Python, que pode variar de acordo com o sistema operacional utilizado.
A referncia oficial para a instalao do frameworkDjango pode ser encontrada em
(LAWRENCE JOURNAL-WORLD, 2007).
3.4 DESENVOLVIMENTO DE UMA APLICAO WEB
Para iniciar o desenvolvimento de uma aplicao web com o frameworkDjango, ne-
cessrio criar um projeto utilizando oscriptdjango-admin.py com a opostartprojecte o nome
do projeto, conforme exemplo abaixo:
-
7/26/2019 TD FabioEduardoThomaz 2007 1
35/95
35
django-admin.py startproject piramide
Figura 16: Criao de um projeto com o script django-admin.py
Este script cria o diretrio do projeto, chamado de piramide, abaixo do diretrio atual.
Caso isto no ocorra, necessrio verificar a instalao do frameworkDjango.
Dentro do diretrio do projeto, so criados os seguintes arquivos:
I. __init__.py: arquivo utilizado pelo Python para identificar que o diretrio atual um pacote;
II. manage.py: arquivo utilizado para a execuo das tarefas do projeto, como uma nova
aplicao ou a sincronizao do projeto com o banco de dados, por exemplo;
III. settings.py: arquivo com as configuraes do projeto;
IV. urls.py: arquivo responsvel pelo mapeamento entre aurlsolicitada pelo usurio e a view
do projeto responsvel por enviar a resposta requisio.
O Django vem com um servidor Web embutido, bastante til para o processo de apren-
dizado e de desenvolvimento das aplicaes. Porm, esse servidor no deve ser utilizado em
ambientes de produo, visto que este capaz de atender apenas uma requisio por vez.
Para ambientes de produo, necessrio utilizar um servidor Web capaz de atender mltiplas
requisies, como por exemplo o Apache.
Aps a criao do projeto, possvel executar o servidor Web de desenvolvimento do
Django, atravs do seguinte comando:
python manage.py runserver
Figura 17: Execuo do servidor Web do frameworkDjango
O servidor Web de desenvolvimento do Django atende as requisies na porta 8000.
Caso seja necessrio alterar a porta, basta informar o nmero da porta desejada no comandode inicializao do servidor, logo aps a oporunserver.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
36/95
36
Para verificar se o Django est funcionando corretamente, necessrio acessar o en-
dereo http://localhost:8000, onde 8000 o nmero da porta que o servidor responde s requi-
sies. Ao acessar este endereo, a seguinte pgina dever ser apresentada, informando que
o Django est funcionando corretamente:
Figura 18: Acesso ao servidor de desenvolvimento do Django
O framework Django utiliza um conceito de projeto com vrias aplicaes. Quando
falamos de uma aplicao Web, podemos visualizar esta aplicao como sendo um projeto
no Django. J as aplicaes de um projeto possuem um escopo especfico, de forma que
podem ser reutilizadas por vrios projetos. Por exemplo, no projeto piramide ser necessrio
desenvolver o cadastro dos professores. Este cadastro poderia ser utilizado em vrios outros
projetos, de acordo com a necessidade do desenvolvedor. Portanto, ser criada uma aplicao
chamada Professores, dentro do projeto piramide.
Para criar uma aplicao, utiliza-se o scriptmanage.py, conforme o exemplo seguir:
python manage.py startapp professores
Figura 19: Criao da aplicao Professores com o scriptmanage.py
Este script cria o diretrio da aplicao Professores, dentro do projeto piramide. Neste
diretrio, so criados os seguintes arquivos:
I. __init__.py: arquivo utilizado pelo Python para identificar que o diretrio atual um pacote;
II. models.py: arquivo utilizado para a definio dos modelos de dados utilizados pela apli-
cao;
III. views.py: arquivo utilizado para a definio dasviewsda aplicao, que possuiro o papel
decontroller, em uma anlise segundo a metodologia MVC;
-
7/26/2019 TD FabioEduardoThomaz 2007 1
37/95
37
A definio dos modelos de dados e a utilizao das viewssero detalhados mais adi-
ante neste captulo.
A criao do projeto e das suas aplicaes faz com que a estrutura bsica de uma
aplicao Web seja criada. A partir deste momento, necessrio configurar o projeto para,
ento, iniciar a codificao das aplicaes.
3.5 CONFIGURAES DO PROJETO
As configuraes de um projeto desenvolvido com o frameworkDjango encontram-se
no arquivo settings.py, localizado no diretrio raiz do projeto. Alm deste arquivo, o framework
Django possui um arquivo global de configuraes, que inicializa todas as configuraes com osvalores padro. Este arquivo o global_settings.py e fica armazenado no diretrio de instalao
do Django, dentro da pasta conf.
Para carregar as configuraes de um projeto, o Django realiza as seguintes operaes:
I. carrega os valores padro de todas as configuraes informadas no arquivo global_settings.py;
II. substitui as configuraes informadas no arquivo settings.py, com os valores especficos
para a configurao do projeto;
Para que seja possvel utilizar o sistema gerenciador de banco de dados MySQL no
projeto, necessrio alterar as seguintes configuraes no arquivo settings.py:
I. DATABASE_ENGINE: varivel utilizada para informar o sistema gerenciador de banco de
dados utilizado pelo projeto. Os valores possveis so: postgresql_psycopg2, postgresql,
mysql, mysql_old, sqlite3 ou ado_mssql;
II. DATABASE_NAME: varivel utilizada para informar o nome do banco de dados utilizado
pelo projeto;
III. DATABASE_USER: varivel utilizada para informar o nome do usurio que possui acesso
ao banco de dados informado no SGBD;
IV. DATABASE_PASSWORD: varivel utilizada para informar a senha do usurio;
V. DATABASE_HOST: varivel utilizada para informar o servidor onde o SGBD executado.Caso nenhum valor seja informado, o Django entender que o banco de dados est sendo
executado no mesmohost, e assumir o valor localhost;
-
7/26/2019 TD FabioEduardoThomaz 2007 1
38/95
38
VI. DATABASE_PORT: varivel utilizada para informar a porta para a conexo com o servidor
do banco de dados;
Alm de configurar os parmetros relacionados ao banco da dados, existem outras con-figuraes importantes para iniciar o desenvolvimento de uma aplicao Web:
I. TIME_ZONE: varivel utilizada para informar ao Django qual o fuso horrio utilizado pelo
projeto. Uma lista com todas as opes possveis pode ser acessada em(POSTGRESQL
GLOBAL DEVELOPMENT GROUP,2007). Este recurso possibilita que um servidor possa hos-
pedar vrias aplicaes Web desenvolvidas com o Django que possuam fusos diferentes.
De acordo com a documentao oficial do projeto, este recurso no est disponvel em
servidores que utilizam o sistema operacional Windows. Nestes casos, esta varivel deve
receber o fuso horrio utilizado pelo sistema operacional;
II. LANGUAGE_CODE: varivel utilizada para informar ao Django o idioma utilizado pelo
projeto;
III. INSTALLED_APPS: varivel utilizada para informar ao Django quais as aplicaes do pro-
jeto estaro disponveis. As aplicaes disponveis so informadas em um tupla, objeto
da linguagem Python semelhante a uma lista, porm com a diferena de que ela no pode
ser alterada aps a sua definio, ou seja, imutvel.
A configurao inicial do Django para o projeto utilizado nos exemplos deste trabalho
mostrada na figura20. As variveis que no so exibidas devem permanecer com os seus
valores iniciais.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
39/95
39
DATABASE_ENGINE = mysql
DATABASE_NAME = piramide
DATABASE_USER = django
DATABASE_PASSWORD =
DATABASE_HOST =
DATABASE_PORT =
TIME_ZONE = America/Sao_Paulo
LANGUAGE_CODE = pt-br
INSTALLED_APPS = (
django.contrib.auth ,django.contrib.contenttypes ,
django.contrib.sessions ,
django.contrib.sites ,
piramide.professores
)
Figura 20: Configuraes alteradas para o projeto piramide no arquivo settings.py
importante lembrar que o arquivo settings.py um programa Python e deve estar de
acordo com a sintaxe da linguagem.
OframeworkDjango oferece vrias outras opes de configurao para o projeto, porm
com estas opes devidamente preenchidas possvel iniciar o desenvolvimento da aplicao.
Outras opes de configurao sero vistas no decorrer deste trabalho.
3.6 DEFINIO DOS MODELOS DE DADOS
O prximo passo para o desenvolvimento de uma aplicao que utilize um banco de
dados utilizando oframeworkDjango a definio dos modelos de dados.
Os modelos de dados definem as tabelas e as regras de negcio utilizadas pela apli-
cao. Utilizando oframeworkDjango, a criao das tabelas feita de modo transparente, de
acordo com as classes definidas pelo desenvolvedor no arquivo models.py, localizado abaixo do
diretrio da aplicao.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
40/95
40
A figura21mostra a definio do modelo de dados Professor para a aplicao professo-
res, no arquivo models.py:
1 from django . db import models
3 class Profe ssor ( models . Model ) :
4 m a t r i c u l a = m od el s . C h a rF i el d ( m a xl en gt h =5 0 , b la n k= Fa ls e , n u l l = F al s e )
5 nome = models . C h ar Fi e ld ( m ax le ng th =1 00 , b la nk =F al se , n u l l = Fa ls e )
6 e nd er ec o = m od el s . C h a rF i el d ( m a xl en gt h =1 00 , b l a nk =Tr ue , n u l l = Tr ue )
7 b a i r r o = models . C h ar Fi e ld ( m ax le ng th = 50 , b l an k=True , n u l l = Tr ue )
8 c id ad e = models . C h ar Fi e ld ( m ax le ng th = 50 , b l an k= Fa ls e , n u l l = Fa ls e )
9 u f = models . C ha rFi el d ( m axlength =2 , bl an k=False , n u l l =False )
10 t e l e f o n e = m od el s . C h a rF i el d ( m a xl en gt h =2 0 , b la n k= Fa ls e , n u l l = F al s e )11 e ma il = models . E ma il Fi el d ( b la nk =Fal se , n u l l = Fa ls e )
12 s a l a r i o = models . D ec i ma l Fi e ld ( m a x_ d ig i ts = 10 , d ec im al _p la ce s =2 )
13 h o r a s _ c o n t r a t o = mo de ls . I n t e g e r F i e l d ( b l a n k= F al s e , n u l l = F a ls e )
Figura 21: Definio do modelo de dados Professor no arquivo models.py
O Django possui uma srie de tipos de campos que atendem diversas necessidades
encontradas no desenvolvimento de aplicaes Web. A tabela1, mostrada a seguir, explica os
tipos de campos utilizados no modelo de dados Professor. Uma lista com todos os tipos de
campos disponveis no Django pode ser encontrada em (LAWRENCE JOURNAL-WORLD, 2007).
Tabela 1: Tipos de campo utilizados no modelo de dados Professor
Tipo de Campo Aplicao
CharField Utilizado para armazenar valores alfanumricos
EmailField Utilizado para validar e armazenar endereos de e-mail
DecimalField Utilizado para armazenar valores numricos com casas decimais
IntegerField Utilizado para armazenar valores numricos inteiros
Para verificar se a definio do modelo de dados est correta, necessrio utilizar o
scriptmanage.py, que se encontra no diretrio raiz do projeto, com a opo validate, conforme
o exemplo mostrado na figura22:
-
7/26/2019 TD FabioEduardoThomaz 2007 1
41/95
41
python manage.py validate
Figura 22: Verificao dos modelos de dados com o scriptmanage.py
Caso a definio do modelo de dados esteja correta, exibida a mensagem 0 errors
found. Em caso de erros, a mensagem exibir qual aplicao est com problemas, qual o erro
encontrado e em que linha do arquivo models.py o erro se encontra.
Com a definio correta dos modelos, o frameworkDjango ir criar as tabelas necess-
rias no banco de dados configurado no projeto. Para verificar quais comandos SQL o Django ir
executar para criar as tabelas da aplicao, deve-se executar oscriptmanage.py com a opo
sqlalle o nome da aplicao, conforme o exemplo mostrado na figura a seguir:
python manage.py sqlall professores
Figura 23: Verificao dos comandos SQL gerados com base nos modelos de dados
O resultado deste comando, com base no modelo definido no arquivo models.py, deve
ser semelhante ao resultado mostrado na figura24,quando o SGBD utilizado for o MySQL:
-
7/26/2019 TD FabioEduardoThomaz 2007 1
42/95
42
1 BEGIN;
2 CREATE TABLE p r o f e s s o r e s _ p r o fe s s o r (
3 id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
4 matr ic ula varchar ( 5 0 ) NOT NULL,
5 nome varchar (100) NOT NULL,
6 endereco varchar (100) NULL,
7 ba ir ro varchar ( 5 0 ) NULL,
8 cidade varchar ( 5 0 ) NOT NULL ,
9 u f varchar ( 2 ) NOT NULL,
10 te lef one varchar ( 2 0 ) NOT NULL,
11 email varchar ( 7 5 ) NOT NULL,
12 s a l a r i o numeric ( 1 0 , 2 ) NOT NULL ,
13 horas_contrato in te ge r NOT NULL14 ) ;
15 COMMIT ;
Figura 24: Resultado da execuo do scriptmanage.py com a oposqlall
A execuo do scriptmanage.py com as opes validatee sqlallservem apenas para
realizar verificaes, no sendo necessrio execut-los para criar as tabelas. Porm, casoexista algum problema na definio dos modelos de dados ou nos parmetros de conexo com
o banco de dados, ser possvel identific-lo antes da execuo do comando para a criao das
tabelas.
Para efetivar a criao das tabelas no banco de dados, necessrio executar o script
manage.py com a oposyncdb, conforme exemplo a seguir:
python manage.py syncdb
Figura 25: Criao das tabelas no banco de dados de acordo com os modelos de dados
Na aplicao Professores existe a necessidade de informar a titulao do professor, que
pode variar de acordo com a instituio que utilizar a aplicao. Para isso, ser criado o modelo
Titulao e relacionado com o modelo Professor, conforme mostrado na figura26.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
43/95
43
1 from django . db import models
3 class T i tu lac ao ( models. Model) :
4 descr icao = models. CharFie ld ( maxlength=50,blank=False , nu l l =False )
5 p on to s = mod el s . I n t e g e r F i e l d ( b l an k =F al se , n u l l = F al s e )
7 de f __str __ ( s el f ) :
8 return se l f . descr icao
10 class Profe ssor ( models . Model ) :
11 m a t r i c u l a = m od el s . C h a rF i el d ( m a xl en gt h =5 0 , b la n k= Fa ls e , n u l l = F al s e )
12 nome = models . C h ar Fi e ld ( m ax le ng th =1 00 , b la nk =F al se , n u l l = Fa ls e )
13 e nd er ec o = m od el s . C h a rF i el d ( m a xl en gt h =1 00 , b l a nk =Tr ue , n u l l = Tr ue )14 b a i r r o = models . C h ar Fi e ld ( m ax le ng th = 50 , b l an k=True , n u l l = Tr ue )
15 c id ad e = models . C h ar Fi e ld ( m ax le ng th = 50 , b l an k= Fa ls e , n u l l = Fa ls e )
16 u f = models . C ha rFi el d ( m axlength =2 , bl an k=False , n u l l =False )
17 t e l e f o n e = m od el s . C h a rF i el d ( m a xl en gt h =2 0 , b la n k= Fa ls e , n u l l = F al s e )
18 e ma il = models . E ma il Fi el d ( b la nk =Fal se , n u l l = Fa ls e )
19 s a l a r i o = models . D ec i ma l Fi e ld ( m a x_ d ig i ts = 10 , d ec im al _p la ce s =2 )
20 h o r a s _ c o n t r a t o = mo de ls . I n t e g e r F i e l d ( b l a n k= F al s e , n u l l = F a ls e )
21 t i t u l a c a o = models . F or ei gn Ke y ( T i tu l a ca o , b l an k= Fa ls e , n u l l = Fa ls e )
Figura 26: Definio do modelo Titulao e relacionamento com o modelo Professor
Os relacionamentos entre os modelos no Django podem ser feitos com os mtodos
descritos na tabela2.
Tabela 2: Tipos de relacionamento disponveis no frameworkDjango
Mtodo Tipo de RelacionamentoForeignKey Utilizado para relacionamentos com chave estrangeira, ou seja, 1 paran
ManyToManyField Utilizado para relacionamentosnparan
OneToOneField Utilizado para relacionamentos 1 para 1
Todos os mtodos de relacionamento devem receber como parmetro o nome do mo-
delo, ou seja, da classe com o qual est sendo feito o relacionamento. Caso o Django no
reconhea o modelo pelo fato de este estar definido aps o modelo que possui o campo relaci-onado, possvel informar o nome do modelo no formatostringcomo parmetro para o mtodo
de relacionamento, conforme o exemplo mostrado na figura27.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
44/95
44
1 from django . db import models
3 class Profe ssor ( models . Model ) :
4 m a t r i c u l a = m od el s . C h a rF i el d ( m a xl en gt h =5 0 , b la n k= Fa ls e , n u l l = F al s e )
5 nome = models . C h ar Fi e ld ( m ax le ng th =1 00 , b la nk =F al se , n u l l = Fa ls e )
6 e nd er ec o = m od el s . C h a rF i el d ( m a xl en gt h =1 00 , b l a nk =Tr ue , n u l l = Tr ue )
7 b a i r r o = models . C h ar Fi e ld ( m ax le ng th = 50 , b l an k=True , n u l l = Tr ue )
8 c id ad e = models . C h ar Fi e ld ( m ax le ng th = 50 , b l an k= Fa ls e , n u l l = Fa ls e )
9 u f = models . C ha rFi el d ( m axlength =2 , bl an k=False , n u l l =False )
10 t e l e f o n e = m od el s . C h a rF i el d ( m a xl en gt h =2 0 , b la n k= Fa ls e , n u l l = F al s e )
11 e ma il = models . E ma il Fi el d ( b la nk =Fal se , n u l l = Fa ls e )
12 s a l a r i o = models . D ec i ma l Fi e ld ( m a x_ d ig i ts = 10 , d ec im al _p la ce s =2 )
13 h o r a s _ c o n t r a t o = mo de ls . I n t e g e r F i e l d ( b l a n k= F al s e , n u l l = F a ls e )14 t i t u l a c a o = models . ForeignKey ( Titulacao , b l a n k =F al s e , n u l l = F al s e )
16 class T i tu lac ao ( models. Model) :
17 descr icao = models. CharFie ld ( maxlength=50,blank=False , nu l l =False )
18 p on to s = mod el s . I n t e g e r F i e l d ( b l an k =F al se , n u l l = F al s e )
20 de f __str __ ( s el f ) :
21 return se l f . descr icao
Figura 27: Relacionamento utilizando parmetro string
O mtodo__str__() utilizado para retornar a representaostringdos objetos que so
instncias da classe onde o mtodo foi definido. O uso deste mtodo ficar mais claro ao longo
deste captulo. Aps cada alterao no arquivo models.py, necessrio aplicar estas alteraes
no banco de dados, atravs do scriptmanage.py, com a oposyncdb.
3.7 ACESSO AOS DADOS
Aps a criao do modelo de dados, o frameworkDjango disponibiliza uma camada de
abstrao entre a aplicao que est sendo desenvolvida e o sistema gerenciador de banco de
dados, possibilitando ao desenvolvedor criar, consultar, atualizar e excluir registros no banco de
dados sem a necessidade de escrever cdigos na linguagem SQL. Esta funcionalidade faz com
que a aplicao seja independente da tecnologia utilizada pelo SGBD. Caso haja a necessidadede migrar a aplicao para outro SGBD, esta migrao poder ser feita sem causar impacto na
aplicao.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
45/95
45
3.7.1 Criao e Atualizao de Registros
Atravs da utilizao dos modelos de dados do frameworkDjango, uma classe Python
do modelo de dados representa uma tabela do banco de dados. Logo, uma instncia destaclasse representa um registro no banco de dados.
Para exemplificar a criao de registros, ser utilizado o console interativo da linguagem
Python no projeto Django. Para iniciar o console interativo do projeto, necessrio executar o
scriptmanage.py com a oposhell, conforme exemplo seguir:
python manage.py shell
Figura 28: Inicializao do console interativo do Projeto
Para criar um registro no banco de dados atravs do Django, basta criar uma instncia
da classe que corresponde a tabela em que deseja-se criar o registro, atribuir os valores neces-
srios aos atributos do objeto e chamar o mtodo save(). Os atributos do objeto so os campos
definidos no modelo de dados. A figura29mostra um exemplo de criao de um registro atra-
vs do console interativo do projeto. importante lembrar que para cada modelo de dados, oDjango cria um campo chamadoid, que recebe um valor seqencial automaticamente durante
a criao do registro. O exemplo mostra que este campo no possui valor antes da chamada do
mtodo save(). Aps a chamada do mtodo, o registro j est armazenado no banco de dados
e o campoidpossui o valor 1.
>>> from piramide.professores.models import Titulacao
>>> t = Titulacao(descricao=Graduado, pontos=1)
>>> print t.id
None
>>> t.save()
>>> print t.id
1
>>>
Figura 29: Criao de um registro na tabela Titulao
-
7/26/2019 TD FabioEduardoThomaz 2007 1
46/95
46
A alterao de registros possui um funcionamento semelhante a criao de registros. A
diferena est na definio de um valor para o campo da chave primria da tabela. Na execuo
do mtodosave(), o Django verifica se o campo da chave primria est preenchido com algum
valor e, caso esteja, faz uma consulta no banco de dados de acordo com o valor informado. Seencontrar um registro, este atualizado. Caso no encontre, o Django cria o registro com os
valores informados.
>>> from piramide.professores.models import Titulacao
>>> t = Titulacao(id=1, descricao=Mestrado, pontos=1)
>>> t.save()
>>> t.descricao = Graduado
>>> t.save()
>>>
Figura 30: Alterao de um registro na tabela Titulao
Desta forma, a consulta no banco de dados realizada pelo Django acontece somente na
chamada do mtodosave(), sendo assim necessrio informar os valores para todos os campos
do registro, mesmo que a necessidade seja alterar apenas um. Para contornar este problema,
possvel realizar a busca do registro, alterar somente o campo necessrio e salvar a atualiza-
o. Para buscar o registro em questo, utiliza-se o mtodo get(), passando como parmetro
o campo, a condio e o valor para consulta. Qualquer campo do modelo de dados pode ser
utilizado, juntamente com as condies de consulta que sero vistas ao longo deste captulo.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
47/95
47
>>> from piramide.professores.models import Titulacao
>>> t = Titulacao.objects.get(id=1)
>>> print t.descricaoGraduado
>>> t.descricao = Mestrado
>>> t.save()
>>> print t.descricao
Mestrado
>>> t.descricao = Graduado
>>> t.save()
>>>
Figura 31: Alterao de um registro utilizando o mtodo get()
3.7.2 Consulta ao Banco de Dados
Conforme visto na figura31, com a utilizao do mtodo get() possvel consultar um
registro especfico no banco de dados. Porm, durante o desenvolvimento de uma aplicao,
existe a necessidade de consultar todos os registros de uma tabela, ou consultar todos os
registros que satisfaam uma ou mais condies.
A busca dos registros no banco de dados feito atravs de um gerenciador do modelo
de dados. Todo modelo de dados possui no mnimo um gerenciador, chamado de objects.
Este objeto uma instncia da classe django.db.models.manager.Manager e utilizado para
buscar um QuerySet, que representa uma coleo de vrios objetos do banco de dados. O
QuerySet, por sua vez, pode possuir filtros que iro limitar a busca dos registros de acordo com
as condies especificadas. Em uma analogia com a linguagem SQL, o QuerySetrepresenta o
comandoSELECTe os filtros representam as clusulas WHERE.
A consulta a todos os registros de uma tabela pode ser feita utilizando o mtodo all(),
conforme exemplo a seguir:
-
7/26/2019 TD FabioEduardoThomaz 2007 1
48/95
48
>>> from piramide.professores.models import Titulacao
>>> t = Titulacao.objects.all()
>>> for item in t:... print item.descricao
...
Graduado
Mestrado
Doutorado
>>>
Figura 32: Consulta a todos os registros da tabela Titulacao com o mtodo all()
Para que o resultado de uma consulta seja ordenado pelos valores de um campo espe-
cfico, utiliza-se o mtodoorder_by().
>>> from piramide.professores.models import Titulacao
>>> t = Titulacao.objects.all().order_by(descricao)
>>> for item in t:
... print item.descricao
...
Doutorado
Graduado
Mestrado
>>>
Figura 33: Ordenao dos registros de uma consulta com o mtodo order_by()
Durante o desenvolvimento de uma aplicao, comum que o desenvolvedor necessite
adicionar condies na consulta, para obter uma coleo de registros mais especfica. O Django
oferece dois mtodos para adicionar estas condies ao QuerySet:
I. filter(): retorna um novo QuerySetcom os registros que atendem as condies informadas
nos parmetros do mtodo;
-
7/26/2019 TD FabioEduardoThomaz 2007 1
49/95
49
II. exclude(): retorna um novo QuerySetcom os registros que no atendem as condies
informadas nos parmetros do mtodo.
A figura34mostra exemplos da utilizao dos mtodosfilter()e exclude().
>>> from piramide.professores.models import Titulacao
>>> t = Titulacao.objects.filter(descricao=Graduado)
>>> for item in t:
... print item.descricao
...
Graduado
>>> t = Titulacao.objects.exclude(descricao=Graduado)
>>> for item in t:
... print item.descricao
...
Mestrado
Doutorado
>>>
Figura 34: Consulta condicional aos registros da tabela Titulacao
Os parmetros utilizados nos mtodosfilter(),exclude()eget()so informados seguindo
a estrutura campo__condio = valor. A figura35mostra um exemplo da utilizao da condio
gtepara filtrar a consulta aos registros da tabela Titulacao:
>>> from piramide.professores.models import Titulacao
>>> t = Titulacao.objects.filter(pontos__gte=5)
>>> for item in t:
... print item.descricao
...
Mestrado
Doutorado
Figura 35: Utilizao da condiogtena consulta aos registros da tabela Titulacao
-
7/26/2019 TD FabioEduardoThomaz 2007 1
50/95
50
As condies utilizadas nos parmetros dos mtodos de consulta so chamadas de
field lookups. A tabela3 lista as condies de consulta aos dados disponveis no Django e o
resultado da sua utilizao.
Tabela 3: Condies de consulta aos dadosCondio Resultado
exact Valor do campo utilizado na condio exatamente igual ao informado
iexact Possui a mesma funcionalidade doexact, porm desconsidera diferenas entre
maisculas e minsculas
contains Contedo do campo utilizado na condio possui o valor informado
icontains Possui a mesma funcionalidade do contains, porm desconsidera diferenas
entre maisculas e minsculas
gt Valor do campo utilizado na condio maior que o valor informadogte Valor do campo utilizado na condio maior ou igual ao valor informado
lt Valor do campo utilizado na condio menor que o valor informado
lte Valor do campo utilizado na condio menor ou igual ao valor informado
in Valor do campo utilizado na condio seja igual a um dos tens de uma lista
startswith Valor do campo utilizado na condio inicie com o valor informado
istartswith Possui a mesma funcionalidade dostartswith, porm desconsidera diferenas
entre maisculas e minsculas
endswith Valor do campo utilizado na condio termine com o valor informado
iendswith Possui a mesma funcionalidade do endswith, porm desconsidera diferenasentre maisculas e minsculas
range Valor do campo utilizado na condio esteja entre a faixa de valores informada
(inclusive)
year Para campos do tipo datee datetime, o ano seja igual ao valor informado,
utilizando quatro dgitos
month Para campos do tipo datee datetime, o ms seja igual ao valor informado,
utilizando nmeros de 1 (Janeiro) 12 (Dezembro)
day Para campos do tipodatee datetime, o dia seja igual ao valor informado
isnull Valores nulos no campo utilizado na condio sejam considerados na consulta,
informandoTrueou False
search Utilizado para busca por contedo apenas no SGBD MySQL, pelo fato de uti-
lizar a indexao do texto disponvel pelo SGBD, desde que este tenha sido
configurado
As condies de consulta que consideram diferenas entre maisculas e minsculas
no funcionam no SGBD SQLite. A utilizao destas condies ir desconsiderar a diferena
entre maisculas e minsculas para obter o resultado da consulta neste SGBD.
O frameworkDjango oferece outras opes para realizar uma consulta aos dados. As
condies apresentadas neste trabalho so suficientes para atender a maioria das necessida-
-
7/26/2019 TD FabioEduardoThomaz 2007 1
51/95
51
des existentes no desenvolvimento de uma aplicao. Porm, existem casos especficos em
que o desenvolvedor necessita realizar a consulta com condies mais complexas. A explica-
o de todas as condies de consulta oferecidas pelo Django est disponvel na documentao
oficial doframework, no endereo(LAWRENCE JOURNAL-WORLD,2007).
3.7.3 Excluso de Registros
A excluso de registros atravs do frameworkDjango efetuada pelo mtodo delete().
Este mtodo pode ser chamado de um objeto relacionado um registro no banco de dados ou
de umQuerySet. A execuo do mtodo delete()a partir de um QuerySetir excluir todos os
registros retornados peloQuerySet.
A excluso de um registro utilizado como chave estrangeira em outros registros far com
que os registros que utilizam esta chave sejam excludos junto com o registro em questo. Este
mecanismo do Django comporta-se da mesma forma que o DELETE CASCADEda linguagem
SQL.
3.8 INTERFACE DE ADMINISTRAO
Algumas aplicaes Web possuem como principal objetivo apresentar determinado con-
tedo aos usurios, como os blogs, os portais de notcias, entre outros. Porm, o contedo
destas aplicaes precisa ser manutenido por algum usurio, atravs de uma interface que
possibilite a manuteno deste contedo. Geralmente, estas interfaces so muito parecidas
em todas as aplicaes Web, e possibilitam ao usurio criar, consultar, alterar e excluir dados
utilizados pela aplicao.
Com o objetivo de facilitar o desenvolvimento destas interfaces de manuteno de con-
tedo, oframeworkDjango oferece uma interface de administrao, criada automaticamente de
acordo com os modelos de dados, possibilitando aos usurios criar, alterar, consultar e excluir
dados das tabelas includas nesta interface.
Para utilizar a interface de administrao do Django, o desenvolvedor deve primeira-
mente identificar quais modelos de dados sero utilizados na interface de administrao, adici-
onando a declarao da classe Admindentro da classe que corresponde ao modelo de dados,
no arquivo models.py, conforme o exemplo a seguir:
-
7/26/2019 TD FabioEduardoThomaz 2007 1
52/95
52
1 from django . db import models
3 class T i tu lac ao ( models. Model) :
4 descr icao = models. CharFie ld ( maxlength=50,blank=False , nu l l =False )
5 p on to s = mod el s . I n t e g e r F i e l d ( b l an k =F al se , n u l l = F al s e )
6 de f __str __ ( s el f ) :
7 return se l f . descr icao
8 class Admin:
9 pass
11 class Profe ssor ( models . Model ) :
12 m a t r i c u l a = m od el s . C h a rF i el d ( m a xl en gt h =5 0 , b la n k= Fa ls e , n u l l = F al s e )
13 nome = models . C h ar Fi e ld ( m ax le ng th =1 00 , b la nk =F al se , n u l l = Fa ls e )14 e nd er ec o = m od el s . C h a rF i el d ( m a xl en gt h =1 00 , b l a nk =Tr ue , n u l l = Tr ue )
15 b a i r r o = models . C h ar Fi e ld ( m ax le ng th = 50 , b l an k=True , n u l l = Tr ue )
16 c id ad e = models . C h ar Fi e ld ( m ax le ng th = 50 , b l an k= Fa ls e , n u l l = Fa ls e )
17 u f = models . C ha rFi el d ( m axlength =2 , bl an k=False , n u l l =False )
18 t e l e f o n e = m od el s . C h a rF i el d ( m a xl en gt h =2 0 , b la n k= Fa ls e , n u l l = F al s e )
19 e ma il = models . E ma il Fi el d ( b la nk =Fal se , n u l l = Fa ls e )
20 s a l a r i o = models . D ec i ma l Fi e ld ( m a x_ d ig i ts = 10 , d ec im al _p la ce s =2 )
21 h o r a s _ c o n t r a t o = mo de ls . I n t e g e r F i e l d ( b l a n k= F al s e , n u l l = F a ls e )
22 t i t u l a c a o = models . F or ei gn Ke y ( T i tu l a ca o , b l an k= Fa ls e , n u l l = Fa ls e )23 class Admin:
24 pass
Figura 36: Ativando a interface de administrao nos modelos de dados
Aps configurar os modelos de dados, necessrio alterar a opo INSTALLED_APPS,
para informar que a interface de administrao uma aplicao utilizada pelo projeto, adicio-
nando a aplicao django.contrib.admin. A figura37mostra um exemplo da configurao do
projeto para ativar a interface de administrao.
-
7/26/2019 TD FabioEduardoThomaz 2007 1
53/95
53
INSTALLED_APPS = (
django.contrib.auth ,
django.contrib.contenttypes ,
django.contrib.sessions ,
django.contrib.sites ,
django.contrib.admin ,
piramide.professores
)
Figura 37: Configurao para ativar a interface de administrao
Aps realizar estas alteraes, necessrio executar o scriptmanage.py, com a opo
syncdb, para que o Django crie as tabelas utilizadas pela interface de administrao. Neste mo-
mento, o Django criar as tabelas necessrias e solicitar a criao de um usurio administrador
para a interface de administrao.
Antes de acessar a interface de administrao, necessrio alterar o arquivo urls.py,
que se encontra no diretrio do projeto. Para ativar o acesso interface de administrao, basta
remover o comentrio da linha referente a interface de administrao, excluindo o caracter #. O
exemplo a seguir mostra como o arquivo urls.py deve ser configurado para ativar a interface de
administrao. Maiores detalhes sobre a configurao de URLs sero vistas no prximo item
deste trabalho.
1 from d jango . conf . ur l s . def aul ts import
3 u r l p a t t e r n s = p a t t er n s ( ,
4 # Example :
5 # ( r ^ p i r a m i d e / , i n c l u d e ( p i r a m i d e . f o o . u r l s ) ) ,
7 # Uncomment t h i s f o r a dm in :
8 ( r ^admin/ , i n c l u d e ( django.contrib.admin.urls) ) ,
9 )
Figura 38: Configurao de URL para ativar