1 de out de 2012

Django e MySQL

    O Django é um framework feito em Python, segue a arquitetura model-view-controller e foi criado oficialmente em 2005 no Kansas, sob a licença BSD. Recebeu esse nome em homenagem ao guitarrista de jazz Django Reinhardt.

Instalação:
     Baixe o Django pelo site oficial: https://www.djangoproject.com/download/.

      Descompacte o arquivo com o comando:  
$ tar -zxvf Django-1.4.1.tar.gz

       Acesse o diretório e instale:
$ cd cd Django-1.4.1/
$ sudo python setup.py install


Instalando o banco de dados:
     O Django suporta os seguintes bancos de dados: PostgreeSQL, SQLLite3 e o MySQL. Nesse artigo vou usar o MySQL. Se você não tem o MySQL instalado, use o comando:
# apt-get install mysql-server

 Agora é preciso instalar a interface Python do MySQL:
# apt-get install python-mysqldb 
# yum install MySQL-python 

Configurando o banco de dados:
     Primeiro vamos criar um banco de dados. Entre no mysql e crie uma nova tabela:
$ mysql -u root -p 
mysql> CREATE DATABASE zeldani CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'zeldani'@'localhost' IDENTIFIED BY 'zeldaniblog';
Query OK, 0 rows affected (0.00 sec)

mysql> USE zeldani;
Database changed
mysql> GRANT ALL PRIVILEGES ON zeldani.* TO 'zeldani'@'localhost' IDENTIFIED BY 'zeldaniblog';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye


Configurando o settings.py:
     O settings.py possui todas as configurações do Django, inclusive a do banco de dados. Modifique esse arquivo para:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'zeldani.db',                      # Or path to database file if using sqlite3.
        'USER': 'zeldani',                      # Not used with sqlite3.
        'PASSWORD': 'zeldaniblog',                  # Not used with sqlite3.
        'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '3030',                      # Set to empty string for default. Not used with sqlite3.
    }

Primeiro exemplo:
     O primeiro exemplo retorna a versão do MySQL, usando o módulo MySQLdb:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb
import sys
con = None
try:
    con = mdb.connect('localhost', 'zeldani', 'zeldaniblog', 'zeldani');
    cur = con.cursor()
    cur.execute("SELECT VERSION()")
    data = cur.fetchone()
    print "Versao do Banco de Dados: %s " % data
except mdb.Error, e:
    print "Erro %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)
finally:
    if con:
        con.close()
       O método connect possui 4 parâmetros: host, usuário, senha e nome do banco. Durante a conexão, é chamado o objeto cursor, usado para buscar os registros nos resultados. O método execute() é usado para executar o SQL.  O fetchone() vai buscar apenas um registro. 

Inserindo uma nova tabela:
     O código abaixo vai inserir uma nova tabela chamada Livros, e uma coluna Titulo com os nomes dos livros:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'zeldani', 'zeldaniblog', 'zeldani');
with con:
    cur = con.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS \
          Livros(Id INT PRIMARY KEY AUTO_INCREMENT, Titulo VARCHAR(25))")
    cur.execute("INSERT INTO Livros(Titulo) VALUES('Learn Python The Hard Way')")
    cur.execute("INSERT INTO Livros(Titulo) VALUES('Dive Into Python')")
    cur.execute("INSERT INTO Livros(Titulo) VALUES('A Byte of Python')")
    cur.execute("INSERT INTO Livros(Titulo) VALUES('Core Python Programming')")
    cur.execute("INSERT INTO Livros(Titulo) VALUES('Think Python')")
 
Visalizando a tabela:
   Para ver os registros criados, podemos usar esse código:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'zeldani', 'zeldaniblog', 'zeldani');
with con:
    cur = con.cursor(mdb.cursors.DictCursor)
    cur.execute("SELECT * FROM Livros")
    linhas = cur.fetchall()
    for linha in linhas:
        print "%s %s" % (linha["Id"], linha["Titulo"])

     O método fetchall() vai pegar todos os registros. Cada tupla retornada representa uma linha da tabela. 


Criando um novo projeto:
$ django-admin.py startproject nomeprojeto

Iniciando o servidor:
$ python manange.py runserver 3030


Criando sua primeira aplicação:
     
    Nessa aplicação vamos usar o banco de dados MySQL. Entre no interpretador do MySQL e crie uma tabela e usuário com os  comandos:

CREATE DATABASE zeldanidb;
USE zeldanidb;
CREATE USER 'zeldani'@'localhost' IDENTIFIED BY 'zeldaniblog';
GRANT ALL ON *.* TO 'zeldani'@'localhost';
quit

   
     Altere as configurações do settings.py com o conteúdo:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'zeldanidb',                      # Or path to database file if using sqlite3.
        'USER': 'zeldani',                      # Not used with sqlite3.
        'PASSWORD': 'zeldaniblog',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}


    No diretório projetos_zeldani gere uma nova aplicação com o comando:

$ python manage.py startapp contatos

     Vai ser criado um novo diretório chamado contatos, contendo os arquivos:
__init__.py = arquivo necessário para a aplicação ser usada como um pacote.
models.py = contêm o código python que define o modelo.
views.py = contêm o código python que define o views do modelo.

    Edite o arquivo projeto_zeldani/contatos/models.py para configurar o banco de dados da sua aplicação:


from django.db import models
class Contatos(models.Model):
      nome = models.CharField('nome', maxlength=200)
      email = models.EmailField('email', blank=True)
      texto = models.TextField('Desc', maxlength=500, blank=True)
      def __str__(self):
            return '%s' % (self.nome)

    Agora edite o arquivo projeto_zeldani/settings.py adicionando essa linha no INSTALLED_APPS:

INSTALLED_APPS = (
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'contatos',
)

     Faça a sincronização com o banco de dados para criar as tabelas:
$ python manage.py syncdb


     Configure o projeto_zeldani/urls.py:
urlpatterns = patterns('',
        (r'contatos/$', 'contatos.views.index')
)

     Configure o arquivo contatos/views.py:
from django.shortcuts import HttpResponse
from contatos.models import contatos

def index(request):
        html = "<H2>Contatos:</H2>"
        return HttpResponse(html)

     Execute a aplicação:
$ python manage.py runserver

Vai ser carregado a tela de contatos no seu navegador: http://localhost:8000/contatos/


Criando um segundo projeto:
     Inicie um novo projeto: $ django-admin.py startproject datahora, acesse o diretório e crie o script datahora.py com o conteúdo:
from django.http import HttpResponse
import datetime

def datahora(request):
    agora = datetime.datetime.now()
    html = "<html><body>Agora sao %s.</body></html>" % agora
    return HttpResponse(html)


Usando templates:
    Primeiro crie um diretório chamado templates. No settings.py mude o diretório do template para o caminho de seu projeto. Ex:
TEMPLATE_DIRS = (
         '/home/zeldani/zeldani/templates',
)

     Modifique o script anterior para a versão com templates:
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime

def datahora(request):
    agora = datetime.datetime.now()
    t = get_template('horas.html')
    html = t.render(Context({'data': agora }))
    return HttpResponse(html)

      Modifique o urls.py:
from zeldani.datahora import datahora
urlpatterns = patterns('',
    (r'^hora/$', datahora),
)


      Agora inicie o servidor, e teste em seu navegador:
$ python manage.py runserver 3030
http://localhost:3030/hora

Usando heranças:
      Salve o código abaixo como zeldani/templates/principal.html:
<html><head>
<title>{ % block title %}</title>
</head>
<body>
<h3>Zeldani's Root Page!</h3>
{% block content %}{% endblock %}
{% block footer %}
<hr><p>Bem vindo ao site do tempo!!!</p>
{% endblock %}
</body></html>


     Agora modifique o horas.html com o conteúdo:
{% extends "principal.html" %}
{% block title %}Site do tempo{% endblock %}
{% block content %}
<p>Agora sao {{ data }}.</p>
{% endblock %}

 

    Teste no navegador:  http://localhost:3030/hora/
    Essa foi uma breve introdução ao framework Django!!! ;)

* Referências:
Wikipédia
Definitive Guide to Django - Jacob Kaplan-Moss
http://zetcode.com/databases/mysqlpythontutorial/

0 comentários:

Postar um comentário