GustavoHenrique.net

  • About
  • Contact
  • RSS Feed
  • Twitter

 

11
Nov

Django com MySQL, JQuery, Ajax e JSON – Parte 1

By gustavohenrique|Django|13 Comments

Introdução

Django é um framework MVC para desenvolvimento web escrito em python. Proporciona velocidade no desenvolvimento, código limpo e organizado e uma poderosa ferramenta de administração.
Essa é a primeira parte de uma série de artigos sobre como criar um sistema de gestão de provedor de internet utilizando Django, MySQL, Javascript (JQuery), Ajax com JSON, CSS e Linux. No momento abordaremos apenas a parte de cadastro de clientes.
Para melhor entendimento, é desejável conhecimento básico em desenvolvimento web, Python e Linux.
Instalação, características, manual e outras informações podem ser encontradas no site Django Brasil.

Sobre o Sistema

Como forma de estudo, resolvi portar as funcionalidades básicas de um sistema antigo que desenvolvi em PHP para Django. Trata-se de um sistema de gestão de provedor de internet, que possibilita o cadastro de clientes, controle de banda, regras de firewall, fluxo de caixa e relatórios gerenciais, interagindo com ferramentas em ambiente Linux. Chamaremos nosso sistema de Sigep – Sistema de Gestão de Provedor. Nome nada criativo, eu sei, mas vamos deixar assim mesmo.

Iniciando

O sistema completo será desenvolvido em Linux, utilizando softwares específicos para o mesmo. É possível desenvolver em Windows e MacOS X, porém o ambiente de produção necessariamente deve ser Linux. Abaixo a descrição do ambiente de desenvolvimento utilizado:

Sistema Operacional: Ubuntu 8.04
IDE/Editor: Komodo Edit para códigos do Django e Geany 0.13 para HTML e CSS
Banco de Dados: MySQL 5.0
Linguagem: Python: 2.5 e Django 1.0

Instalação

Não será abordado o processo de instalação nesse artigo. No site www.djangobrasil.com tem um ótimo tutorial de instalação em Windows e Linux.

Projeto Vs. Aplicação

Em Django, projeto é o sistema no todo e aplicação é um módulo desse sistema. No nosso projeto Sigep, teremos várias aplicações (módulos), que são: cliente, rede, relatório, etc. Você pode criar uma única aplicação contendo toda funcionalidade do sistema, porém isso deixaria o código mais extenso e de difícil manutenção.

Criando o Projeto

Abra um terminal, entre no diretorio onde deseja trabalhar e crie o projeto com o script django-admin.py.

gu@notebook:~$ mkdir projetos
gu@notebook:~$ cd projetos
gu@notebook:~$ django-admin.py startproject sigep
gu@notebook:~$ cd sigep
gu@notebook:~$ ls sigep
__init__.py manage.py settings.py urls.py

O django-admin.py criou um diretório com o nome do projeto contendo os seguintes arquivos:

__init__.py: Arquivo vazio. Serve apenas para identificar que é um pacote python
manage.py: Script para gerenciar o projeto no django
settings.py: Arquivo de configuração do projeto
urls.py: Onde é definido o mapeamento das URLs

Configurando o Projeto

Vamos editar o arquivo settings.py e incluir as linhas abaixo:

1
2
import os
LOCAL = lambda *args:os.path.join(os.path.dirname(__file__), *args)

As linhas acimas criam uma função para retornar o caminho absoluto do diretório do nosso projeto. Agora vamos alterar as seguintes variáveis:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'sigepdjango'
DATABASE_USER = 'usuario_do_mysql_aki'
DATABASE_PASSWORD = 'senha_do_usuario_do_mysql_aki'
 
TIME_ZONE = 'America/Sao_Paulo'
 
LANGUAGE_CODE = 'pt-br'
 
MEDIA_ROOT = LOCAL('files')
 
TEMPLATE_DIRS = (
    LOCAL('templates')
)

O que fizemos acima foi configurar o projeto para acessar nosso banco de dados no MySQL, ajustar o timezone e idioma de acordo com o Brasil, setar o MEDIA_ROOT, que é o diretório onde nossos arquivos externos serão armazenados e definir o diretório templates onde nossos arquivos HTML ficarão.
Agora vamos criar nossa aplicação.

Bookmark It

Add to Del.icio.us Add to Diigo Add to Facebook Add to Google Bookmarks Add to LinkedIn Add to Mister Wong Add to Twitter Add to Yahoo My Web
View More Pages: →
Tagged as: ajax, Django, jquery, json, mysql, python
Add your comment →

13 Comments

  1. Muito legal o tuto, parabéns!!

    Hugs!!

    By: Relsi Reply →
    November 11, 2008 at 6:20 pm
  2. Muito bom, dei só uma olhada mas com esse tipo de material o Django ira crescer cada vez mais.

    By: Abaster Reply →
    November 11, 2008 at 7:20 pm
  3. Fala rapaz parabens ai ficou muito bom ,,
    uma abraço

    By: Rânielli The head Reply →
    November 11, 2008 at 11:58 pm
  4. Gustavo,

    Meus sinceros parabéns pelo material, está excelente.

    Um desafio:
    – O que tu achas de fazer uma versão desse ajax com a biblioteca mootools ?

    By: Leandro Reply →
    November 13, 2008 at 2:21 pm
  5. Parabéns Gustavo,

    Ouvi falar da eficiência do Django a poucos dias e procurei algo simples que pudesse me comprovar isso…
    Vc sintetizou nesse post tudo o que eu estava procurando! Agora é só me aprofundar no framework. Se existirem mais posts como esse por aí tenho certeza que a comunidade Python e Django vão crescer muito em quantidade e principalmente em qualidade! 100% produção…

    By: Bernardo Marambaia Reply →
    March 15, 2009 at 11:12 pm
  6. Verifiquei que no arquivo forms.py ao usarmos o método mark_safe, devemos incluir a classe safestring do Django.
    Para resolver o problema devemos incluir a linha from django.utils.safestring import mark_safe no início do arquivo /cliente/forms.py para importar o método mark_safe.
    Abs…

    By: Bernardo Marambaia Reply →
    March 16, 2009 at 12:24 am
  7. na linha
    $(“#”+objHtmlReturn).append(”+item.fields[fieldreturn]+”);

    qd escolho o bairro da um erro dizendo q a palavra ou o campo “fieldreturn” nao está definido por isso nao carrega as ruas no outro select

    By: Maria Reply →
    May 5, 2009 at 5:29 pm
  8. Excelente tutorial, colega. :)

    Parabéns XD

    By: Francisco Souza Reply →
    August 10, 2009 at 10:09 am
  9. Opa, tudo bom.
    Primeiro quero parabenizá-lo pelo artigo. Segundo informo que o método javascript declarado acima para atualizar o select html está quebrado. Criei outro método jQuery, que ficou assim:

    $( function() {
    $(“select#id_bairro”).change(
    function() {
    $.getJSON( “/cliente/getlogradouros?id=” + $(this).val(),
    function(j) {
    var options = ‘———- ‘;
    for ( var i = 0; i < j.length; i++) {
    options += ”
    + j[i].fields['logradouro']
    + ”;
    }
    $(“#id_logradouro”).html(options);
    $(“#id_logradouro option:first”).attr(‘selected’,
    ‘selected’);
    $(“#id_logradouro”).attr(‘disabled’, false);
    })
    $(“#id_logradouro”).attr(‘selected’, ‘selected’);
    })
    })

    Para que ele funcione, o metodo no módulo views.py precisa ser mudado para o método GET, que no meu caso ficou assim:

    def getlogradouros( request ):
    id = int( request.GET.get( ‘id’ ) )
    lista = Logradouro.objects.filter( bairro = id )
    if lista.count() > 0:
    json = serializers.serialize( “json”, lista )
    else:
    lista = [{"pk":"0", "fields":{'logradouro':"Nenhum registro"}}]
    json = simplejson.dumps( lista )
    return HttpResponse( json, mimetype = “application/json” )

    By: Helder Reply →
    August 27, 2009 at 4:41 pm
  10. Ola gostei do material que vc publicou, vc terminou a segunda parte deste tutorial referente ao sistema???

    By: luiz Martins Reply →
    July 13, 2010 at 11:46 am
    • @Luiz, nao cheguei a terminar, mas escrevi um artigo aqui no blog que fala um pouco sobre. O titulo é “Servidor Linux com Proxy e Controle de Banda”.
      []‘s

      By: gustavohenrique Reply →
      July 13, 2010 at 10:27 pm
  11. Parabéns pelo tutorial, muito legal.
    Alguém tem um site com o demo para testar?

    By: Guilherme Reply →
    June 17, 2011 at 7:07 pm
    • Guilherme,
      na verdade esse sistema eu nunca cheguei a terminar. Comecei portando de PHP quando ainda estava aprendendo django. Em outra ocasião precisei de algumas funcionalidades e então desenvolvi o bandcontrol, cujo código está no github e há um artigo sobre isso aqui no blog.
      Dá uma olhada no bandcontrol que talvez te ajude!

      By: gustavohenrique Reply → Author
      June 17, 2011 at 7:48 pm

Leave your comment below! Cancel Reply

View More Posts:
  • →

Tags

admin Django extjs firewall grails jquery KingHost liberações Linux manual model modelform mod_wsgi moeda brasileira mudanças mysql nível de serviço oo PagSeguro pdf php PIL pisa problemas proxy python qa qos real relacionamento roteamento service desk shell script sites tdd tipsforlinux traducao ubicomp ubuntu urllib virtualhost Webservices wikipedia xsol __init__

Recent Posts

  • Configurando um servidor LDAP no CentOS 6.2
  • Introdução ao padrão MVC no Ext JS 4
  • Virtualização com KVM
  • Autenticação Facebook no Grails
  • Grails com Sqlite3 no Ubuntu 11.04
  • Deploy no tomcat usando django-jython
  • Deploy múltiplas versões do Django no Nginx com VirtualEnv
  • Comandos básicos do Git
  • Introdução ao Apache Wicket
  • Feliz 2011

Archives

Categories

My tweets

  • @tregismoreira Genesis 7200 com android 4 2 days ago
  • @marcomaciel blz! 1 week ago
  • @marcomaciel hack com qualquer linguagem em qualquer plataforma pra mim ta valendo! #soudev 1 week ago
  • Fui instalar o android 2.3 da lg e agora meu celular não liga. #ffuuu 1 week ago
  • Tentando gerar uma NFe e não consigo =/ #stacktrace Impressionante como todos os sites e apps do governo são ruins. 2 weeks ago
  • More updates...

Powered by the inLine Minimal WordPress Theme