Django – Model e View – MySQL – Python

Publicado: 6 de janeiro de 2015 em Python

Um modelo é a única e definitiva fonte de informações sobre seus dados. Ele contém os campos essenciais e os comportamentos dos dados que você está armazenando. Geralmente, cada modelo mapeia uma tabela do banco de dados. Como uma regra em geral, cada modelo é uma classe em Python e cada atributo do modelo representa um campo no banco de dados.

Em Django, a maioria das interações com um banco de dados são feitas por meio de seu ORM (Object-Relational Mapper), que é um recurso de ações do Django bem parecido com outros frameworks como o famoso Rails. Os quadros ORMs são cada vez mais populares entre os desenvolvedores, pois eles automatizam muitas interações comuns com um banco de dados e usam abordagens orientadas a objetos familiares em vez de instruções SQL. Contudo desenvolvedores podem optar por um não utilizar o ORM nativo do Django o substituindo por um Toolkit como o SQLAlchemy que é um kit de ferramentas Python SQL e Object Relational Mapper que dá aos desenvolvedores de aplicativos o poder e a flexibilidade do SQL.

Django Models: https://docs.djangoproject.com/en/1.7/topics/db/models/

Criando um Modelo e Exibindo seus Dados

Vamos começar criando um modelo básico para uma tabela do banco de dados igual a uma tabela no qual já utilizamos em outros exemplos e criamos usando scripts SQL. No entanto não podemos utilizar a tabela já pronta pois vamos cria-la através do ORM do Django sem utilizar instruções SQL.

Ao criar seus modelos o Django cria uma serie de outras tabelas no banco de dados que são necessárias para que um projeto funcione corretamente, não se preocupe com isto agora, o universo de frameworks ORMs são profundos e possuem seus próprios conceitos nos quais são capazes de facilitar a vida do desenvolvedor proporcionando uma sintaxe uniforme e regras sobre as boas praticas de utilização para se manipular dados, evitando assim que desenvolvedores utilizem o banco de dados de forma despadronizada, deste modo, garantindo de um jeito mais eficaz sua normalização e seu desempenho.

1 – Crie um projeto e uma aplicação Django, vamos utilizar o projeto e a aplicação criada anteriormente chamada HelloWorldApp, e vamos utilizar o conector Python para MySQL da Oracle, que você também encontra no post anterior. Para utilizar o conector, altere o arquivo settings.py do seu projeto e defina a conexão e seus parâmetros:

MySQL - settings.py

MySQL – settings.py

2 – Abra o arquivo models.py e crie seu modelo, utilizando o código abaixo:

Model

Model

3 – Abra o terminal do Linux, pois precisamos utilizar alguns comandos do administrador Django para efetuar as tarefas necessárias, elas são: A validação do modelo, a criação do script SQL para o modelo, e a execução do script SQL no banco de dados. Utilize os comandos abaixo:

python manage.py validate

python manage.py sqlall HelloWorldApp

python manage.py syncdb
Django - Validate - Sqlall, SyncDB

Django – Validate – Sqlall, SyncDB

4 – Através do ORM do Django, uma vez que você tem um modelo e sua respectiva tabela no banco de dados, você pode utilizar comandos para operações CRUD (ler, criar, alterar e deletar). Use o comando abaixo para criar um objeto do modelo e inserir dados no banco:

python manage.py shell

from HelloWorldApp.models import Funcionario

f1 = Funcionario(nome="James", sobrenome="Hetfield", cargo="Vocalista/Guitarrista", salario = "1234.56")
f1.save()
Python Shell

Python Shell

5 – Você pode abrir o MySQL Workbench para visualizar sua tabela e as tabelas que o ORM do Django criou assim que você definiu seu primeiro modelo:

MySQL Workbench

MySQL Workbench

6 – Modifique seu arquivo views.py de acordo com o código correspondente e rode o servidor Django e teste sua aplicação:

Django - Aplicação

Django – Aplicação

Exemplo:

Neste exemplo criamos uma aplicação simples que utiliza o banco de dados MySQL, criando um modelo de dados e o exibindo através de sua visão.

Python

settings.py

"""
Django settings for devaberto project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 's8eic)^+f@%gg0ffq9j3_kfsoo11k*a-&8x7jw@2p(ujy$=p4a'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'HelloWorldApp',    

)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'devaberto.urls'

WSGI_APPLICATION = 'devaberto.wsgi.application'

# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases

DATABASES = {
    'default': {
        'NAME': 'DAsandbox',
        'ENGINE': 'mysql.connector.django',
        'USER': 'root',
        'PASSWORD': 'pass',
        'OPTIONS': {
          'autocommit': True,
        },
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_URL = '/static/'

models.py

from django.db import models

# Create your models here.

class Funcionario (models.Model):
    nome = models.CharField(max_length=30)
    sobrenome = models.CharField(max_length=50)
    cargo = models.CharField(max_length=50)
    salario = models.DecimalField(max_digits=19, decimal_places=10)

views.py

# coding=utf-8
from django.shortcuts import render
from django.http import HttpResponse

# Importa dados
from HelloWorldApp.models import Funcionario

# Retorna dados atraves do objeto do modelo
dados = Funcionario.objects.values_list(flat=True)

# Recupera campos de uma row
cod = str(dados[0][0])
nome = str(dados[0][1])
sobrenome = str(dados[0][2])
cargo = str(dados[0][3])
salario =str(dados[0][4])

# Cria simples HTML
html = """
 <h1>Desenvolvimento Aberto</h1>
<h2>Django - Models e Views</h2>
<br>
<h3>MySQL - Dados:</h3>
"""

# Formataçao simples
row =  cod + " - " + nome + " " + sobrenome + \
       " - " + cargo + " - R$: " + salario

# Exibe View
def hello(request):
    return HttpResponse(html + row)

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s