76
Oficina de dJango 1º Dia - Introdução à ferramenta

Oficina de dJango - coral.ufsm.brcoral.ufsm.br/pet-si/wp-content/uploads/2017/11/Dia-1.pdf · Controller - são implementadas regras de negócios, onde Model e passados para a camada

Embed Size (px)

Citation preview

Oficina de dJango1º Dia - Introdução à ferramenta

Objetivo

A oficina terá seu foco em desenvolvimento back-end, utilizando o framework Django da

linguagem Python.

O que será abordado?

● Introdução a linguagem Python;● Instalação da ferramenta e criação de

projeto/aplicação;● Arquitetura MTV x MVC;● Manipulação de Banco de Dados;● Criação de um CRUD (Create, Read, Update e Delete);

○ O exemplo será para o gerenciamento de filmes;● Upload de mídias;● Modificações no projeto para utilização de outros

gerenciadores de bancos de dados.

Projeto exemplo

Quem somos?

Sumário

● Princípios Básicos

● Criação de Projeto Django

● Estrutura de projeto Django

● Configuração do Projeto

● Arquivos Models.py e Forms.py

Princípios Básicos● Python

● Entrada e saída

● Utilização de arrays

● Estruturas de decisão

C

Python

● Orientada a Objetos

● Tipagem dinâmica e forte

● O próprio Python infere o tipo dos dados que uma variável recebe

● Sensitivo a espaços

○ Não possui { } e ;

String

>>> "teste"'teste'

Concatenar

>>> "Coé " + "Rapaziada"'Coé Rapaziada'

Métodos

>>> len(“paralelepipedo”)14

Declaração de variáveis

>>> nome = “Fausto”

Saída de dados

>>> nome'Fausto'

>>> print (nome)Fausto

Arrays/Listas

>>> sorteio = [4, 23, 22, 9, 75, 61]

Métodos: len, sort, append, reverse

Exemplo

>>> sorteio.reverse()

>>> print(sorteio)

>>> [61, 75, 9, 22, 23, 4]

Estruturas de decisão: if, elif, else

Exemplo:

imc = 11if imc < 18:

print("Abaixo do peso")elif 18 <= imc < 25

print(“Peso ideal”)elif 25 <= imc < 35:

print("Sobrepeso")else:

print("Obeso”)

Executar programas em python

python3 <nome.py>

Exemplo: arquivo: teste.py

>>> python3 teste.py

Ambiente Virtual

Ambiente virtual (também chamado de virtualenv).

Desenvolver usando DJANGO dentro de uma virtualenv é altamente recomendado pois ela isola seus projetos, ou seja, pode-se alterar um projeto sem afetar outros.

E agora vamos para a instalação do Django...

Criação de Projeto Django

● Comandos

● Criação do admin

C

Instalação Python Linux

Download python:

sudo apt-get install python3.5

Checar instalação:$ python3 --version

Iniciar pythonpython3

Instalação Django

Criar pasta de instalação (oficinaDjango):

mkdir <pasta>

Acessar pasta:

cd <pasta>

Criar ambiente virtual:

python3 -m venv myvenv

Instalação Django

Iniciar ambiente virtual:

source myvenv/bin/activate

Instalar PIP - Python Package Index:

pip install --upgrade pip

Instalar Django:

pip install django~=1.9.0

Criar Projeto

Criar projeto (oficinaDjango):

django-admin startproject <nome>

Gerar banco de dados:

python3 manage.py migrate

Inicializar servidor:

python3 manage.py runserver

Criar Aplicação

Criar aplicação (oficinaFilmes):

python3 manage.py startapp <nome>

Parte Front-End

● Como o foco da oficina o Back-End da aplicação, iremos disponibilizar os arquivos referente ao Front-End através do seguinte link: https://goo.gl/7dm7S7

● Ao extrair o conteúdo, mover as pastas para:○ oficinaDjango/oficinaDjango/static○ oficinaDjango/oficinaDjango/templates

Estrutura de projeto Django● Principais arquivos

● MTV x MVC

M

Principais arquivos - settings.pysettings.py - configurações de banco de dados, arquivos estáticos e indicar o caminho base para as mídias e demais configurações de aplicação.

● import os - maneira portável de usar funcionalidades do sistema operacional (paths);

● BASE_DIR - variável que vai ter o caminho do nosso projeto Django. Serve para que não tenhamos que trabalhar com caminhos absolutos;

Principais arquivos - settings.py

● DEBUG = True - mostrar informações detalhadas em uma página sobre o erro ocorrido;

● ALLOWED_HOSTS - lista de strings representando o host/nome de domínio que o projeto Django pode servir. Serve como uma medida de segurança para evitar que um invasor possa realizar certos tipos de ataques (envenenamento de cache, disparo de e-mails com links maliciosos, etc);

Principais arquivos - settings.py

● INSTALLED_APPS - lista de strings designando todas as aplicações que estão habilitadas nesta instalação do Django;

Principais arquivos - settings.py

● MIDDLEWARE - lista de classes Middleware que serão usadas no seu projeto Django. Middleware é um framework do Django, que tem um conjunto de classes que servem como “gatilhos” para processar e modificar request/response;

Principais arquivos - settings.py

● ROOT_URLCONF - URL raiz do projeto. O Django precisa de um URL que seja o ponto de partida, declarado nessa variável;

Principais arquivos - settings.py

● TEMPLATES - lista de configurações para todas as engines de templates a serem usadas pelo Django;

Principais arquivos - settings.py

● WSGI_APPLICATION - caminho Python completo para o objeto WSGI da aplicação que os servidores built-in do Django vão utilizar;

● STATIC_URL - URL utilizada para se referir aos arquivos estáticos localizados no STATIC_ROOT;

● STATICFILES_DIRS - caminho utilizado para localizar os arquivos estáticos;

Principais arquivos - settings.py

● DATABASES - dicionário de dicionários onde cada dicionário contém as configurações para uso de um banco de dados, possibilitando assim o uso de múltiplos bancos num mesmo projeto.

● regex - expressão regular para combinar padrões de URL em strings;

● view - função “view” usada para processar a solicitação do usuário para um URL correspondente;

● kwargs - argumentos de keywords arbitrárias passados para a “view” de destino;

● name - identificador único para a dada URL.

Principais arquivos - urls.pyurls.py - URLs das views;

Principais arquivos - views.pyviews.py - definição das funções que vão ser exibidas nas páginas;

● def - declaração da função view;● index - nome da função;● render - função que vai renderizar (montar) nosso

modelo.

Principais arquivos - forms.pyforms.py - definição dos formulários onde o usuário entra com os dados para interagir com o banco;

● class - declaração do nosso formulário;● AtorForm - nome do formulário;● ModelForm - definição do tipo de objeto, o Django já

estrutura ele de acordo com o forms.ModelForm;

Principais arquivos - forms.pyforms.py - definição dos formulários onde o usuário entra com os dados para interagir com o banco;

● class Meta - aqui dizemos ao Django qual modelo deveria ser utilizado para criar o formulário (“model = Ator”);

● fields - campos de preenchimento do nosso formulário.

Principais arquivos - models.pymodels.py - declaração dos objetos relacionados com o banco de dados;

● class - palavra reservada que indica que estamos definindo um objeto;

● Ator - nome do nosso modelo;● models.Model - significa que o Ator é um modelo de

Django, e que deve ser salvo no banco.

Objetos

O que é um objeto?● É uma coleção de propriedades e ações.

Vamos a um exemplo:

Objetos

Pegamos nosso modelo anterior:

Ator---------nome_atoridade__str__()

MVC x MTV

MVC é um padrão de desenvolvimento que separa o desenvolvimento nas três camadas seguintes:

Model | View | Controller

MTV é uma outra interpretação que o Django deu para o padrão MVC, chamando o “View” de “Template” e o “Controller” de “View”.

Model | Template| View

MVC

Model - é implementado o banco de dados ou o modelo objeto-relacional;

View - é onde fica a interface do sistema;

Controller - são implementadas regras de negócios, onde são processados os dados vindos da camada Model e passados para a camada View.

Alguns frameworks que utilizam o padrão MVC:

● Ruby on Rails; TurboGears; Mentawai; Laravel.

MVC

MTV

Model - é implementado o banco de dados ou o modelo

objeto-relacional;

Template - é implementado o modo que a informação vai

ser apresentada;

View - função de retorno para uma URL, porque esta

função de retorno descreve qual informação deve ser

apresentada.

MTV

Onde se encaixa o “Controller”, então?

Pode-se dizer que é o próprio framework, no caso do Django, o maquinário que envia uma requisição para a “View” apropriada, de acordo com a configuração de URL do Django.

MTV

Configuração do Projeto

● Configuração do settings.py● Adição dos arquivos estáticos e templates

V

Configurando o settings.py

● Inserção do app no projeto.

● Importação dos arquivos estáticos.

● Importação dos templates.

Templates

● Um template é um arquivo que nos permite exibir diferentes informações de uma mesma forma consistente.

● Por exemplo, poderíamos usar um template para escrever uma carta, pois apesar de terem destinos e conteúdos diferentes, possuem o mesmo formato.

● O formato do template do Django é baseado em HTML.

Adição dos templates

● Vamos criar um diretório para os templates.

● Os templates são salvos no diretório oficinaDjango/templates/oficinaFilmes.

Importando os templates

● Precisamos importar todos os templates que serão criados para o projeto.

URLs

● Uma URL nada mais é que um endereço web, nós vemos uma URL toda vez que acessamos uma página da web.

● Cada página deve ter sua própria URL, dessa forma o app sabe o que mostrar ao usuário que acessa uma URL.

Importando as URLs

● Vamos abrir o arquivo oficinaDjango/urls.py .

● Vamos utilizar a função “include” para fazer a importação das urls do arquivo, que criaremos posteriormente, oficinaFilmes/urls.py .

Adição das URLs no app

● Vamos criar o arquivo oficinaFilmes/urls.py e inserir as seguintes linhas:

● Aqui estamos apenas importando as URLs do Django e todas as views, que criaremos posteriormente.

Arquivos estáticos

● Arquivos estáticos são todas as imagens e arquivos CSS, é todo arquivo que não é dinâmico, ou seja, não importa o contexto da requisição, seu conteúdo será sempre o mesmo, para todos os usuários.

Importando arquivos estáticos

● Em oficinaDjango/settings.py, para importar os arquivos estáticos que serão criados, inserir o seguinte código:

Arquivos models.py e forms.py● Introdução a BD

● Declaração do Banco no models.py

● Criação dos forms.py

L

Introdução a BD

● Coleção de dados, onde são armazenadas informações (geralmente em tabelas) utilizadas na aplicação, como:○ Dados do usuário;○ Dados de postagens (ou filmes nesse caso);○ Etc.

ator

ID nome idade

1 “Morgan Freeman” 80

2 “Ben Affleck” 45

Introdução a BD

● Para gerenciar o banco de dados existem algumas opções de SGBDS, algumas das mais conhecidas são:

○ MySQL○ PostgreSQL○ Oracle○ SQLite○ MongoDB

● SQLite○ Banco de dados padrão do Django;○ Não irá requerer nenhuma instalação adicional;

Declaração do BD no models.py

● Vamos até o arquivo oficinaFilmes/models.py

● Nesse arquivo serão definidos todos os modelos que iremos utilizar na aplicação;

● Cada modelo corresponde a uma tabela do banco de dados;

Declaração do BD no models.py

● Vamos até o arquivo oficinaFilmes/models.py

● Nesse arquivo serão definidos todos os modelos que iremos utilizar na aplicação;

● Cada modelo corresponde a uma tabela do banco de dados;

● Vamos codificar!

Vamos codificar!

Podemos apagar o conteúdo e copiar o seguinte código:

Vamos entender o que acabamos de fazer!

● from … import …○ Adicionam partes de outros arquivos

● class Ator(models.Model):○ Define o nosso modelo de Ator

Vamos entender o que acabamos de fazer!

● models.CharField - String

● models.PositiveIntegerField - Int Unsigned

● models.DecimalField - Números decimais

○ Definem os tipos de dados de cada uma das colunas da tabela

● models.ManyToManyField(Ator)○ Observe que cada filme pode ter vários atores, assim como

cada ator pode estar em vários filmes. Esse é o comando responsável por criar essa relação.

Vamos entender o que acabamos de fazer!

● models.ForeignKey○ Cria uma relação com outra tabela, onde por exemplo, um

filme teria apenas um diretor.

● Outros tipos de dados podem ser verificados em:○ https://docs.djangoproject.com/en/1.11/ref/models/fields/

Vamos entender o que acabamos de fazer!

● def __str__(self):return self.nome_ator

○ Método criado para retornar o nome de um ator. Atenção para o duplo underscore (_) de cada lado de str.

Criando as tabelas no Banco

Com os modelos criados, agora podemos criar as tabelas no BD. Para isso é preciso realizar os seguintes comandos:

Para informar ao Django das atualizações (cria migrations):

python3 manage.py makemigrations oficinaFilmes

Para aplicar essas atualizações:

python3 manage.py migrate oficinaFilmes

Banco de dados criado!

Pronto, agora já temos nosso banco de dados criado!

Paramos AQUI!!

Faça o download em:

https://goo.gl/Dm2aTu

Criação dos forms.py

● Os formulários nos permitem manipular da maneira que desejarmos as interfaces para cadastrar e editar os registros;

● Pode-se também criar um ModelForm que irá mandar as informações diretamente para um Modelo;

● Agora vamos criar o arquivo oficinaFilmes/forms.py

Criação dos forms.py

● Os formulários nos permitem manipular da maneira que desejarmos as interfaces para cadastrar e editar os registros.

● Pode-se também criar um ModelForm que irá mandar as informações diretamente para um Modelo;

● Agora vamos criar o arquivo oficinaFilmes/forms.py

● Vamos codificar!

Vamos codificar!

Vamos codificar!

● Importamos os módulos necessários para a criação do formulário;

● Foram criados dois formulários ModelForm: AtorForm e ProducaoForm;

● A classe meta indica que qual modelo será usado para cada um dos formulários através de model;

● Já a variável fields indica quais os campos serão utilizados em cada formulário;

Vamos entender o que acabamos de fazer! (rapidamente)

● A função __init__ funciona como um construtor para a classe, ela será executada cada vez que o formulário for instanciado;

● Estamos utilizando essa função para podermos utilizar as classes aplicar as classes do Bootstrap aos campos de cada formulário.

Vamos entender o que acabamos de fazer! (rapidamente)

Visualização do formulário

● Pronto, agora que temos nossos formulários criados;

● Para visualizá-lo precisaremos configurar uma rota em urls.py para um função em view.py que será responsável por tratar a requisição ao formulário;

● Para teste iremos realizar o processo a seguir...

Visualização do formulário

● Inserir o seguinte código em oficinaFilmes/urls.py

● Inserir o seguinte código em oficinaFIlmes/view.py

url(r'^atorForm/$', views.ator_form, name='ator_form')

def ator_form(request): form = AtorForm() return render(request, 'oficinaFilmes/cadastroAtor.html', {'form': form})

Visualização do formulário

REFERÊNCIAS

https://tutorial.djangogirls.org/pt/django/

https://simpleisbetterthancomplex.com/series/2017/09/04/a-complete-beginners-guide-to-django-part-1.html

https://docs.djangoproject.com/en/1.11/

DÚVIDAS?

[email protected]