iMaster Developers

Diemesleno Souza Carvalho

Diemesleno Souza Carvalho

é Tecnólogo em Desenvolvimento de Sistemas para Internet, Analista de Sistemas na Secretaria de Fazenda de Mato-Grosso do Sul e diretor de T.I. da Webdomeni. Trabalha com sistemas para Internet desde 2004 utilizando PHP, MySQL, PostgreSQL, C# e Python. É entusiasta GNU/Linux tendo experiência em diversas distribuições desde 1998. Atualmente também realiza pesquisas na área de Desenvolvimento de Jogos e Inteligência Artificial."
  • Publicou
    1
    Artigo(s)
    book
  • Visualizados
    100
    Vezes
    eye
  • Desde
    2008
    clock
awardArtigos Publicados
Diemesleno Souza Carvalho
Desenvolvimento
Aplicações rápidas para Web com Django

Criado dentro do Lawrence Journal-World por Adrian Holovaty. Adrian era apaixonado por música e seu sonho era ser jornalista. Mas como nem tudo é perfeito ele trabalhava em um jornal como desenvolvedor. Já cansado de ter que refazer muitas coisas na sua rotina diária, ao conhecer Python depois de estudar o livro Mergulhando no Python,…

Publicidade
, 'django.view.static.serve',{ 'document_root': media}),\n# (r'^empresa\u002F', include('empresa.foo.urls')),\n\n# Uncomment the admin\u002Fdoc line below and add 'django.contrib.admindocs'\n# to INSTALLED_APPS to enable admin documentation:\n \u003Cspan class=\"coment\"\u003E(r'^admin\u002Fdoc\u002F', include('django.contrib.admindocs.urls')),\u003C\u002Fspan\u003E\n\n# Uncomment the next line to enable the admin:\n \u003Cspan class=\"coment\"\u003E(r'^admin\u002F(.*)', admin.site.root),\u003C\u002Fspan\u003E\n\n\u003Cspan class=\"coment\"\u003E#Página principal da nossa aplicação\u003C\u002Fspan\u003E\n \u003Cspan class=\"coment\"\u003E('r^ window.__SERVER_VARS__ = {"applicationRestUrl":"https:\u002F\u002Fadmin.imasters.com.br\u002Fwp-json","applicationBaseUrl":"https:\u002F\u002Fadmin.imasters.com.br"} , 'index'),\u003C\u002Fspan\u003E\n \u003Cspan class=\"coment\"\u003E('^(?P<object_id>\\d+)\u002F window.__SERVER_VARS__ = {"applicationRestUrl":"https:\u002F\u002Fadmin.imasters.com.br\u002Fwp-json","applicationBaseUrl":"https:\u002F\u002Fadmin.imasters.com.br"} , 'detail'),\u003C\u002Fspan\u003E\n)\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n\n\u003Cp\u003EAs linhas em azul acima são as linhas que foram alteradas. O restante ficará no momento como estão. Não se preocupem muito com o seu conteúdo, mas dificilmente na maioria dos projetos que você fizer será diferente deste aqui.\u003C\u002Fp\u003E\n\n\u003Cp\u003ECaso o browser ainda esteja aberto apenas acrescente \"\u003Cstrong\u003E\u002Fadmin\u002F\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\u003Cp\u003ESe você fechou o browser e parou o servidor, abra novamente o terminal, entre no diretório do projeto:\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003E\"\u002Fhome\u002Fusuario\u002Fdjango_projetos\u002Fempresa\u002F\"\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003Edigite: \u003Ckbd\u003Epython manage.py runserver\u003C\u002Fkbd\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EAbra o browser e digite o endereço: \u003Ca href=\"http:\u002F\u002F127.0.0.1:8000\u002Fadmin\u002F\" class=\"ext\"\u003Ehttp:\u002F\u002F127.0.0.1:8000\u002Fadmin\u002F\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003ECaso os códigos tenham sido digitados de forma correta, e não ocorreu nenhum outo problema, teremos uma página da administração do Django, com um campo usuário e senha.\u003C\u002Fp\u003E\n\n\u003Cp\u003EEste campo deverá ser preenchido com as informações que fornecemos quando sincronizamos nossa base de dados.\u003C\u002Fp\u003E\n\n\u003Cp\u003ETemos então, a interface administrativa do nosso projeto. Podemos ver que a interface está administrando as aplicações que foram fornecidas automaticamente pelo Django e as nossas também. Temos até o momento a aplicação \"\u003Cstrong\u003EAuth\u003C\u002Fstrong\u003E\", a \"\u003Cstrong\u003ESites\u003C\u002Fstrong\u003E\" e a \"\u003Cstrong\u003EVagas\u003C\u002Fstrong\u003E\".\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EPasso 9:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EAinda na interface administrativa do nosso projeto, clique em Locals na nossa aplicação. Você verá que ainda não existe nenhum local cadastrado. E verá também que existe um botão \"Adicionar Local\" no canto superior direito.\u003C\u002Fp\u003E\n\n\n\u003Cp\u003EClique nele e adicione alguns locais.\u003C\u002Fp\u003E\n\n\n\u003Cp\u003EFeito isto, vá agora em Empregos e adicione também algumas vagas.\u003C\u002Fp\u003E\n\n\n\u003Cp\u003ERepare que em ambos os casos o Django criou todos os formulários e campos necessários para essa nossa administração.\u003C\u002Fp\u003E\n\n\n\u003Cp\u003EDepois de adicionarmos alguns locais e empregos na nossa aplicação podemos ver que o Django já nos apresenta os dados cadastrados, mas de uma forma que ainda não é legal.\u003C\u002Fp\u003E\n\n\n\n\u003Cp\u003EIremos agora melhorar isso. Abra novamente o arquivo admin.py que está em \"\u003Cstrong\u003E\u002Fempresa\u002Fvagas\u002Fadmin.py\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\n\u003Cp\u003EEdite ele para que fique da seguinte forma:\u003C\u002Fp\u003E\n\n\n\u003Cdiv class=\"codigo\"\u003E\u003Cpre\u003E\u003Ccode\u003Efrom empresa.vagas.models import Local\nfrom empresa.vagas.models import Emprego\nfrom django.contrib import admin\n\nclass LocalAdmin(admin.ModelAdmin):\n \u003Cspan class=\"coment\"\u003Elist_display = (\"cidade\", \"estado\", \"pais\")\u003C\u002Fspan\u003E\n \u003Cspan class=\"coment\"\u003Eordering = [\"estado\"]\u003C\u002Fspan\u003E\n \u003Cspan class=\"coment\"\u003Esearch_fields = (\"estado\", \"pais\")\u003C\u002Fspan\u003E\n \u003Cspan class=\"coment\"\u003Elist_filter = (\"estado\",)\u003C\u002Fspan\u003E\n\n\nclass EmpregoAdmin(admin.ModelAdmin):\n \u003Cspan class=\"coment\"\u003Elist_display = (\"titulo\", \"descricao\", \"local\", \"publicado\")\u003C\u002Fspan\u003E\n \u003Cspan class=\"coment\"\u003Eordering = [\"-publicado\"]\u003C\u002Fspan\u003E\n \u003Cspan class=\"coment\"\u003Esearch_fields = (\"titulo\", \"descricao\")\u003C\u002Fspan\u003E\n \u003Cspan class=\"coment\"\u003Elist_filter = (\"local\",)\u003C\u002Fspan\u003E\n\nadmin.site.register(Local, LocalAdmin)\nadmin.site.register(Emprego, EmpregoAdmin)\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n\n\n\u003Cp\u003EAgora que acrescentamos algumas linhas de código, visualize novamente a aplicação. Tanto os Locais quanto as vagas cadastradas então mais limpas e arrumadas. E olhando para o código fica claro o que foi \"pedido\" para o Django.\u003C\u002Fp\u003E\n\n\n\n\u003Cp\u003E\u003Cstrong\u003EPasso 10:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\n\n\n\u003Cp\u003EIremos agora criar as páginas de visualização. Para isto, editaremos agora nossas views e nossos templates.\u003C\u002Fp\u003E\n\n\u003Cp\u003ECom o Komodo Edit, abra o arquivo \"\u003Cstrong\u003Eviews.py\u003C\u002Fstrong\u003E\" que está em \"\u003Cstrong\u003E\u002Fhome\u002Fusuario\u002Fempresa\u002Fvagas\u002Fviews.py\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EComo podemos ver ele ainda está praticamente vazio, contanto apenas com um comentário. Edite ele para que se pareça com o trecho abaixo.\u003C\u002Fp\u003E\n\n\u003Cdiv class=\"codigo\"\u003E\u003Cpre\u003E\u003Ccode\u003Efrom django.shortcuts import get_object_or_404, render_to_response\nfrom vagas.models import Emprego\n\ndef index(request):\n lista = Emprego.objects.order_by('-publicado')[:10]\n return render_to_response('vagas\u002Findex.html', {'lista':lista})\n\ndef detail(request, object_id):\n vaga = get_object_or_404(Emprego, pk=object_id)\n return render_to_response('vagas\u002Fdetail.html',{'vaga':vaga})\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n\n\u003Cp\u003EComentando um pouco o código acima, por agora podemos dizer que as duas funções criadas \"\u003Cstrong\u003Eindex\u003C\u002Fstrong\u003E\" e \"\u003Cstrong\u003Edetail\u003C\u002Fstrong\u003E\" serão responsáveis por \"gerar\" as informações que serão visualizadas daqui a pouco na nossa aplicação.\u003C\u002Fp\u003E\n\n\n\u003Cp\u003EPara que isso seja possível, será necessário agora apenas criarmos nossos templates.\u003C\u002Fp\u003E\n\n\n\u003Cp\u003ELembre-se de que no arquivo \"\u003Cstrong\u003Esettings.py\u003C\u002Fstrong\u003E\" informamos que nosso diretório de templates ficaria em:\u003C\u002Fp\u003E\n\n\n\u003Cdiv class=\"codigo\"\u003E\u003Cpre\u003E\u003Ccode\u003ETEMPLATE_DIRS = (\n os.path.join(os.path.dirname(__file__), '\u003Cspan class=\"coment\"\u003Etemplates\u003C\u002Fspan\u003E'),\n)\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n\n\u003Cp\u003EOu seja, na raiz do nosso projeto \"\u003Cstrong\u003Eempresa\u003C\u002Fstrong\u003E\" haveria uma pasta chamada \"\u003Cstrong\u003Etemplates\u003C\u002Fstrong\u003E\" com nossos respectivos templates.\u003C\u002Fp\u003E\n\n\u003Cp\u003ERepare também que nas views que criamos acima o \"\u003Cstrong\u003Ereturn\u003C\u002Fstrong\u003E\" irá renderizar as páginas \u003Cstrong\u003Eindex.html\u003C\u002Fstrong\u003E e \u003Cstrong\u003Edetail.html\u003C\u002Fstrong\u003E em um diretório \"\u003Cstrong\u003Evagas\u003C\u002Fstrong\u003E\", que é um diretório dentro da pasta \"\u003Cstrong\u003Etemplates\u003C\u002Fstrong\u003E\". Sendo assim, podemos notar que para um melhor controle dos nossos templates, ao menos por enquanto, é legal que deixemos separados os templates de cada aplicação em sua própria pasta com o nome da aplicação dentro do diretório \"\u003Cstrong\u003Etemplates\u003C\u002Fstrong\u003E\".\u003C\u002Fp\u003E\n\n\u003Cp\u003EEntão, para finalizarmos esta parte, crie um diretório chamado \"\u003Cstrong\u003Evagas\u003C\u002Fstrong\u003E\" dentro da pasta \"\u003Cstrong\u003Etemplates\u003C\u002Fstrong\u003E\" para que fique da seguinte forma:\u003C\u002Fp\u003E\n\n\u003Cp\u003E\"\u003Cstrong\u003E\u002Fhome\u002Fusuario\u002Fdjango_projetos\u002Fempresa\u002Ftemplates\u002Fvagas\u002F\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\n\n\u003Cp\u003E\u003Cstrong\u003EPasso 11:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\n\n\n\u003Cp\u003EEditando os templates.\u003C\u002Fp\u003E\n\n\n\u003Cp\u003ECom o Komodo edite aberto, crie um arquivo que servirá de base para todas as nossas páginas do projeto. Caso isto pareça confuso, imagine que em seu site haverá diversas páginas, e que em todas ou na maiorias destas páginas um cabeçalho, menu ou rodapé se repetirão. Para que você não tenha que repetir os códigos, o Django sugere para você o DRY (Don't Repeat Yourself).\u003C\u002Fp\u003E\n\n\u003Cp\u003EEste primeiro arquivo deverá ser criado no diretório \"\u003Cstrong\u003Etemplates\u003C\u002Fstrong\u003E\" e deverá ser chamado de \"\u003Cstrong\u003Ebase.html\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EEste é o caminho que deverá ficar o arquivo: \"\u003Cstrong\u003E\u002Fempresa\u002Ftemplates\u002Fbase.html\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EDeixe o arquivo com as seguinte linhas de código:\u003C\u002Fp\u003E\n\n\u003Cdiv class=\"codigo\"\u003E\u003Cpre\u003E\u003Ccode\u003E<!DOCTYPE html PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD XHTML 1.0 Transitional\u002F\u002FEN\"\nhttp:\u002F\u002Fwww.w3c.org\u002FTR\u002Fxhtml1\u002FDTD\u002Fxhtml1-transitional.dtd>\n<html xmlns=http:\u002F\u002Fwww.w3c.org\u002F1999\u002Fxhtml xml:lang=\"en\" lang=\"en\">\n<head>\n<title> Super Empresa: {% block title %} Page {% endblock %} <\u002Ftitle>\n\u003Cspan class=\"coment\"\u003E{% block extrahead %} {% endblock %}\u003C\u002Fspan\u003E\n<\u002Fhead>\n<body>\n\u003Cspan class=\"coment\"\u003E{% block content %} {% endblock %}\u003C\u002Fspan\u003E\n<\u002Fbody>\n<\u002Fhtml>\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n\n\u003Cp\u003ERepare que tirando os códigos destacados em azul, todo o restante é HTML puro. E mesmo a parte destacada será familiar para quem já trabalhou com PHP + o SMARTY.\u003C\u002Fp\u003E\n\n\u003Cp\u003EO próximo passo é criar a página \"base.html\" que será a base de todas as páginas da aplicação \"vagas\" no nosso projeto. Não confunda com o arquivo base anterior. Lembre-se de que o Django trabalha com Projetos e Aplicações. O primeiro que criamos foi o base do projeto, este agora será o base da aplicação.\u003C\u002Fp\u003E\n\n\u003Cp\u003EPara isso, crie o arquivo \"\u003Cstrong\u003Ebase.html\u003C\u002Fstrong\u003E\" no seguinte caminho:\"\u003Cstrong\u003E\u002Fempresa\u002Ftemplates\u002Fvagas\u002Fbase.html\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EEdite o arquivo e escreva o código abaixo:\u003C\u002Fp\u003E\n\n\u003Cdiv class=\"codigo\"\u003E\u003Cpre\u003E\u003Ccode\u003E\u003Cspan class=\"coment\"\u003E{% extends \"base.html\" %}\u003C\u002Fspan\u003E\n\u003Cspan class=\"coment\"\u003E{% block extrahead %}\u003C\u002Fspan\u003E\n<style>\nbody {\nfont-style: arial;\ncolor:navy;\n}\nh1 {\ntext-align: center;\n}\n.job .title {\nfont-size: 12px;\nfont-weight: bold;\n}\n.job .posted {\nfont-style: italic;\n}\na:link {\ntext-decoration:none;\n}\na:visited {\ntext-decoration:none;\n}\na:hover {\ntext-decoration:underline overline;\nbackground:#ffc;\ncolor: #FF0000;\n}\na:active {\ntext-decoration:none;\n}\n<\u002Fstyle>\n\u003Cspan class=\"coment\"\u003E{% endblock %}\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n\n\u003Cp\u003ENeste arquivo podemos ver que em sua maior parte são estilos para as páginas da nossa aplicação.\u003C\u002Fp\u003E\n\n\u003Cp\u003EQuanto à parte de código destacada, na primeira linha é onde o Django diz que este arquivo é a extensão do arquivo \"\u003Cstrong\u003Ebase.html\u003C\u002Fstrong\u003E\" do nosso projeto.\u003C\u002Fp\u003E\n\n\u003Cp\u003EA segunda linha em destaque diz que o código escrito entre ela e o fechamento do bloco (última linha em destaque) são para serem inseridos no \"head' dos arquivos da nossa aplicação.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EOBS\u003C\u002Fstrong\u003E: Claro que essa forma de colocar estilos é apenas demonstrar a forma que o Django trabalha com templates. Em uma aplicação mais \"séria\" iríamos ter os diretórios com nossos CSS, JS, e imagens todos separados.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAgora crie o arquivo \"index.html\" no seguinte caminho: \"\u003Cstrong\u003E\u002Fempresa\u002Ftemplates\u002Fvagas\u002Findex.html\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EAdicione as linhas de código abaixo:\u003C\u002Fp\u003E\n\n\u003Cdiv class=\"codigo\"\u003E\u003Cpre\u003E\u003Ccode\u003E{% extends \"vagas\u002Fbase.html\" %}\n\n{% block title %} Lista de vagas {% endblock %}\n\n{% block content %}\n<h1>Lista de vagas<\u002Fh1>\n<ul>\n\u003Cspan class=\"coment\"\u003E{% for vaga in lista %}\u003C\u002Fspan\u003E\n\u003Cspan class=\"coment\"\u003E<li><a href=\"{{ vaga.id }}\">{{ vaga.titulo }}<\u002Fa><\u002Fli>\u003C\u002Fspan\u003E\n\u003Cspan class=\"coment\"\u003E{% endfor %}\u003C\u002Fspan\u003E\n<\u002Ful>\n{% endblock %}\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n\n\u003Cp\u003EDeste arquivo destaquei apenas o \"for\" que irá percorrer nossa tabela em busca do título das nossas vagas.\u003C\u002Fp\u003E\n\n\n\u003Cp\u003ELembre-se de que nos os templates no Django são compostos de tags HTML e códigos Python. Sendo que para os códigos Python as instruções estarão entre \"\u003Cstrong\u003E{% %}\u003C\u002Fstrong\u003E\" e as variáveis entre \"\u003Cstrong\u003E{{ }}\u003C\u002Fstrong\u003E\".\u003C\u002Fp\u003E\n\n\n\n\u003Cp\u003EO último arquivo para criarmos e editarmos é o \"detail.html\" que será apresentado ao se clicar no link gerado na página anterior. Este arquivo deverá estar no seguinte caminho: \"\u003Cstrong\u003E\u002Fempresa\u002Ftemplates\u002Fvagas\u002Fdetail.html\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\u003Cp\u003ECrie o mesmo e adicione as seguintes linhas de código:\u003C\u002Fp\u003E\n\n\u003Cdiv class=\"codigo\"\u003E\u003Cpre\u003E\u003Ccode\u003E{% extends \"vagas\u002Fbase.html\" %}\n\n{% block title %} Detalhes da vaga {% endblock %}\n\n{% block content %}\n<h1>Detalhes da vaga<\u002Fh1>\n\ndiv class=\"job\">\n<div class=\"title\">\n{{ vaga.titulo }}\n-\n{{ vaga.local }}\n<\u002Fdiv>\n<div class=\"posted\">\nPostado em: {{ vaga.publicado|date:\"d-M-Y\" }}\n<\u002Fdiv>\n<div class=\"description\">\n{{ vaga.descricao }}\n<\u002Fdiv>\n<\u002Fdiv>\n<p> <\u002Fp>\n<a href=\"http:\u002F\u002F127.0.0.1:8000\u002F\">Voltar<\u002Fa>\n{% endblock %}\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n\u003Cp\u003EEste arquivo, como podem ver, não tem nada de diferente. Ele apenas apresenta as informações referentes à vaga clicada na tela anterior.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAgora podemos abrir novamente o terminal, entrarmos dentro do diretório do nosso projeto \u003C\u002Fp\u003E\n\n\u003Cp\u003Ee startarmos nosso servidor para visualizar nossa aplicação pronta.\u003C\u002Fp\u003E\n\n\u003Cp\u003EDentro de \"\u003Cstrong\u003E\u002Fhome\u002Fusuario\u002Fdjango_projeto\u002Fempresa\u002F\u003C\u002Fstrong\u003E\"\u003C\u002Fp\u003E\n\n\n\u003Cp\u003EDigite: \u003Cem\u003Epython manage.py runserver\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EAbra o navegado e digite o seguinte endereço: \u003Ca href=\"http:\u002F\u002F127.0.0.1:8000\u002F\" class=\"ext\"\u003Ehttp:\u002F\u002F127.0.0.1:8000\u002F\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EAgora podemos passear pelas informações das vagas cadastradas pela administração do site, inclusive ser os detalhes das mesmas.\u003C\u002Fp\u003E\n\n\u003Cp\u003ECom isso, terminamos por aqui. Espero que tenham gostado do tutorial e do Django. Nos próximos iremos ver mais algumas mágicas que o poder do Django proporciona.\u003C\u002Fp\u003E\n\n\u003Cp\u003ELembrando que qualquer critica ou sugestão será bem-vinda. E caso encontrem erros nos scripts podem me avisar que corrigirei o mais breve possível.\u003C\u002Fp\u003E\n\n\u003Ch4\u003EReferências\u003C\u002Fh4\u003E\n\n\u003Cp\u003E\u003Ca href=\"http:\u002F\u002Fgroups.google.com\u002Fgroup\u002Fdjango-brasil\u002F\" class=\"ext\"\u003Ehttp:\u002F\u002Fgroups.google.com\u002Fgroup\u002Fdjango-brasil\u002F\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Ca href=\"http:\u002F\u002Fdjangoproject.com\u002Fdocumentation\u002F\" class=\"ext\"\u003Ehttp:\u002F\u002Fdjangoproject.com\u002Fdocumentation\u002F\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Ca href=\"http:\u002F\u002Fcode.djangoproject.com\u002F\" class=\"ext\"\u003Ehttp:\u002F\u002Fcode.djangoproject.com\u002F\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Ca href=\"http:\u002F\u002Fgroups.google.com\u002Fgroup\u002Fdjango-user\" class=\"ext\"\u003Ehttp:\u002F\u002Fgroups.google.com\u002Fgroup\u002Fdjango-user\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Ca href=\"http:\u002F\u002Fgroups.google.com\u002Fgroup\u002Fdjang-developers\" class=\"ext\"\u003Ehttp:\u002F\u002Fgroups.google.com\u002Fgroup\u002Fdjang-developers\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n","excerpt":"\u003Cp\u003ECriado dentro do Lawrence Journal-World por Adrian Holovaty. Adrian era apaixonado por música e seu sonho era ser jornalista. Mas como nem tudo é perfeito ele trabalhava em um jornal como desenvolvedor. Já cansado de ter que refazer muitas coisas na sua rotina diária, ao conhecer Python depois de estudar o livro Mergulhando no Python,…\u003C\u002Fp\u003E\n","link":"https:\u002F\u002Fimasters.com.br\u002Fdesenvolvimento\u002Faplicacoes-rapidas-para-web-com-django","date":"28 nov, 2008","thumbnail":"","externalMention":"","author":{"id":"7200","thumbnail":"https:\u002F\u002Fsecure.gravatar.com\u002Favatar\u002Ff425fdc6c2ed0c9259acccd9d73ae3f3?s=96&d=mm&r=g","name":"Diemesleno Souza Carvalho","description":"é Tecnólogo em Desenvolvimento de Sistemas para Internet, \r\nAnalista de Sistemas na Secretaria de Fazenda de Mato-Grosso do Sul e \r\ndiretor de T.I. da Webdomeni. \r\nTrabalha com sistemas para Internet desde 2004 utilizando PHP, MySQL, \r\nPostgreSQL, C# e Python. É entusiasta GNU\u002FLinux tendo experiência em diversas distribuições desde 1998. \r\nAtualmente também realiza pesquisas na área de Desenvolvimento de Jogos e Inteligência Artificial.\"","slug":"diemesleno_souza_carvalho","url":"https:\u002F\u002Fimasters.com.br\u002Fperfil\u002Fdiemesleno_souza_carvalho","registered":"2008-11-17 09:18:51","social":{"linkedin":null,"youtube":null,"facebook":"","twitter":"","instagram":null,"github":null,"url":"http:\u002F\u002Fwww.diemesleno.com.br","mail":"diemesleno@gmail.com"},"articles_count":1,"views_count":100,"certifications":null,"conquests":null,"office":null},"categories":[{"title":"Desenvolvimento","slug":"desenvolvimento","id":7234,"link":"https:\u002F\u002Fimasters.com.br\u002Fdesenvolvimento"}],"tags":[],"relateds":[],"seo":[],"type":"post"}],"totalArticles":1,"maxPages":1,"page":1,"isFetchingPagination":false},"category":{"success":false,"data":{}},"categoryArticles":{"success":false,"isFetchingPagination":false,"maxPages":0,"page":1,"data":{}},"categoryMostRead":{"success":false,"data":{}},"home":{"success":false,"featured":[],"options":{"homeProducts":[]},"allCategories":{},"featuredArticles":{},"magazines":{"data":[]},"tv":{},"forums":[],"authorsRanking":{},"events":{},"certificatedUsers":[],"news":[]},"page":{"success":false,"data":{}},"magazine":{"success":false,"magazines":[]},"schedule":{"success":false,"data":{}},"searchResult":{"success":false,"totalPosts":0,"totalPage":0,"currentPage":1,"posts":[],"term":"","orderBy":"recents","currentFilter":"articles","isLoading":true,"isLoadingPagination":false},"singleNews":{"success":false,"data":{}},"listNews":{"success":false,"isFetchingPagination":false,"maxPages":0,"page":1,"data":[]},"sponsors":{"success":false,"data":{}},"header":{"success":true,"menus":{"main":[{"ID":138755,"order":1,"parent":0,"title":"Back-End","url":"https:\u002F\u002Fimasters.com.br\u002Fback-end","attr":"package","target":"","classes":"package","xfn":"","description":"Tecnologias utilizadas no backend da aplicação","object_id":7158,"object":"category","type":"taxonomy","type_label":"Categoria","children":[]},{"ID":138756,"order":2,"parent":0,"title":"Mobile","url":"https:\u002F\u002Fimasters.com.br\u002Fmobile","attr":"package","target":"","classes":"package","xfn":"","description":"Conteúdos sobre Desenvolvimento Mobile nas plataformas iOS (iPhone e iPad) e Android.","object_id":4255,"object":"category","type":"taxonomy","type_label":"Categoria","children":[]},{"ID":139476,"order":3,"parent":0,"title":"Front End","url":"https:\u002F\u002Fimasters.com.br\u002Ffront-end","attr":"package","target":"","classes":"package","xfn":"","description":"Conteúdos sobre HTML5, CSS3, Javascript, JQuery, Web Standards e SEO.","object_id":7304,"object":"category","type":"taxonomy","type_label":"Categoria","children":[]},{"ID":138764,"order":4,"parent":0,"title":"DevSecOps","url":"https:\u002F\u002Fimasters.com.br\u002Fdevsecops","attr":"package","target":"","classes":"package","xfn":"","description":"","object_id":1,"object":"category","type":"taxonomy","type_label":"Categoria","children":[]},{"ID":139204,"order":5,"parent":0,"title":"Design & UX","url":"https:\u002F\u002Fimasters.com.br\u002Fdesign-ux","attr":"package","target":"","classes":"package","xfn":"","description":"Conteúdos sobre User Experience, Arquitetura de Informação, Usabilidade, Acessibilidade, Design Responsivo, Teoria do Design e Photoshop.","object_id":7252,"object":"category","type":"taxonomy","type_label":"Categoria","children":[]},{"ID":138759,"order":6,"parent":0,"title":"Data","url":"https:\u002F\u002Fimasters.com.br\u002Fdata","attr":"package","target":"","classes":"package","xfn":"","description":"Conteúdos sobre Banco de Dados Oracle, MySQL, SQL Server, MongoDB, DB2 e Postgre SQL, sobre BI e análise de dados.","object_id":16,"object":"category","type":"taxonomy","type_label":"Categoria","children":[]},{"ID":138758,"order":7,"parent":0,"title":"APIs e Microsserviços","url":"https:\u002F\u002Fimasters.com.br\u002Fapis-microsservicos","attr":"package","target":"","classes":"package","xfn":"","description":"Dicas e tutoriais sobre APIs públicas como Facebook, Twitter, PayPal, Buscapé, Google, etc e arquitetura de microsserviços, com códigos de exemplo, vídeos, cursos.","object_id":4257,"object":"category","type":"taxonomy","type_label":"Categoria","children":[]}],"secondary":[{"ID":138752,"order":1,"parent":0,"title":"Fórum iMasters","url":"https:\u002F\u002Fforum.imasters.com.br\u002F","attr":"","target":"_blank","classes":"","xfn":"","description":"","object_id":138752,"object":"custom","type":"custom","type_label":"Link personalizado","children":[]},{"ID":139067,"order":2,"parent":0,"title":"Portal E-Commerce Brasil","url":"http:\u002F\u002Fwww.ecommercebrasil.com.br","attr":"","target":"","classes":"","xfn":"","description":"","object_id":139067,"object":"custom","type":"custom","type_label":"Link personalizado","children":[]},{"ID":156289,"order":3,"parent":0,"title":"iMasters Business","url":"http:\u002F\u002Fbusiness.imasters.com.br","attr":"","target":"","classes":"","xfn":"","description":"","object_id":156289,"object":"custom","type":"custom","type_label":"Link personalizado","children":[]}]}},"webinar":{"success":false,"data":{}},"webinars":{"success":false,"isFetchingPagination":false,"maxPages":0,"page":1,"data":{"next":[],"prev":[]}},"tv":{"sectionNameLeft":{"small":"Vídeos","large":"iMasters TV"},"itemsLeft":[{"text":"Em Destaque","slug":"recents"},{"text":"Mais Vistos","slug":"most-viewed"}],"sectionNameRight":{"small":"","large":""},"itemsRight":[{"text":"Mais Recentes","slug":"recents"},{"text":"7Masters","slug":"7-masters"},{"text":"PHP Experience","slug":"php-experience"},{"text":"Android DevConference","slug":"android-devconference"},{"text":"Busca","slug":"search"}],"currentVideo":"recents","currentListVideo":"recents"}} window.__SERVER_VARS__ = {"applicationRestUrl":"https:\u002F\u002Fadmin.imasters.com.br\u002Fwp-json","applicationBaseUrl":"https:\u002F\u002Fadmin.imasters.com.br"}