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:
2 – Abra o arquivo models.py e crie seu modelo, utilizando o código abaixo:
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
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()
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:
6 – Modifique seu arquivo views.py de acordo com o código correspondente e rode o servidor Django e teste sua 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)