td fabioeduardothomaz 2007 1

Upload: junior-wagner-lopes

Post on 02-Mar-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 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