Posts da Tag: Python - Blog da TreinaWeb

Guias Python

Guia da linguagem Python

O que é Python

Criado por Guido Van Rossum em meados dos anos 90, o Python é uma linguagem de programação de alto nível, multiplataforma e open source, que ganhou destaque nos últimos anos por possuir uma ótima curva de aprendizagem, ser uma linguagem leve e ter se tornado uma das principais linguagens para o desenvolvimento de IA, Machine Learning e Big Data, áreas em grande crescimento nos últimos anos.

Python é uma linguagem de programação multiparadigma, ou seja, suporta diversos paradigmas de desenvolvimento, como, orientado a objetos, funcional, imperativo, entre outros. Desta forma, com o Python um mesmo programa pode ser feito utilizando diferentes paradigmas ou um único programa poderá ser desenvolvido utilizando mais de um paradigma.

Suas demais características, aplicações, vantagens e sintaxe podem ser vistas em nosso artigo “O que é Python”.

Desenvolvedor Python
Formação: Desenvolvedor Python
Aprenda os principais conceitos do Python (uso de variáveis, estruturas condicionais e estruturas de decisão), como trabalhar com orientação à objetos (métodos, construtores, destrutores, classes, herança, polimorfismo e duck-typing), estruturas de dados (Listas, Filas, Pilhas, Árvores Binárias, Dicionários, Conjuntos, Tabelas de Espalhamento e Mapas), banco de dados relacionais (DB API e SQLAlchemy) e como criar aplicações desktop com o Kivy.
CONHEÇA A FORMAÇÃO

Afinal, por que devo aprender Python?

O Python foi apontado pelo Stack Overflow como uma das principais linguagens de programação para o ano de 2019, principalmente por possuir uma grande demanda de trabalho, o que acarretou em diversas vagas de emprego em todo o mundo, e o manteve como uma ótima alternativa para o ano de 2020 e para este novo ano de 2021.

Dentre suas principais aplicações podemos citar Data Science, Machine Learning, Big Data, Desenvolvimento Web (Django e Flask) e muitas outras.

Tudo isso, sem dúvidas, a torna uma excelente escolha de linguagem como podemos ver em nosso artigo “Abordando os motivos para aprender Python“.

Como Instalar o Python e executar seu primeiro exemplo

Agora que já sabemos o que é o Python e suas principais características, estamos prontos para realizar a instalação e executar o nosso primeiro exemplo com a linguagem como podemos acompanhar em nosso artigo “Instalação do Python e nosso primeiro Olá Mundo

Principais IDEs para desenvolvimento

Para facilitar o desenvolvimento de programas com o Python, a melhor maneira é utilizando IDEs. São elas que proporcionam mecanismos que facilitam toda a escrita, testes e execução do nosso código.

IDE ou Integrated Development Environment (Ambiente de Desenvolvimento Integrado) é um software que auxilia no desenvolvimento de aplicações, muito utilizado por desenvolvedores, com o objetivo de facilitar diversos processos (ligados ao desenvolvimento), que combinam ferramentas comuns em uma única interface gráfica do usuário (GUI). Desta forma, como principais IDEs para desenvolvimento Python podemos citar:

Eclipse

O Eclipse é uma excelente IDE, muito utilizada no mercado. Seu uso facilita a criação de aplicações Python tanto para Desktop ou Web. O download do Eclipse poderá ser realizado em seu próprio site.

PyCharm

PyCharm conta com desenvolvimento multitecnologias, onde, além do Python, oferece suporte para CoffeeScript, TypeScript, Cython, JavaScript, SQL, HTML/CSS, linguagens de modelo, AngularJS, Node.js e muitas outras.

O download do PyCharm é feito em seu próprio site, onde é possível acompanhar todas as suas novidades, recursos, suporte e muito mais.

Jupyter Notebook

Criada em 2014, derivado do IPython, o Jupyter Notebook é baseada na estrutura servidor-cliente, que permite a manipulação de documentos. O Jupyter Notebook independe de linguagem e suporta diversos ambientes de execução, entre elas: Julia, R, Haskell, Ruby, e o próprio Python.

Para instalar o Jupyter Notebook basta acessar o seu site, onde você também encontrará toda a sua documentação, blog, novidades e muito mais.

Spyder

O Spyder é outra opção para desenvolvedores Python, muito utilizado principalmente por cientistas de dados, já que possui integração com as principais bibliotecas como NumPy, SciPy, Matplotlib e IPython.

O download do Spyder poderá ser feito em seu site, onde também é possível verificar seus plugins, componentes e muito mais.

Em nosso blog possuímos o artigo “Principais IDEs para desenvolvimento em Python” onde citamos as características de cada ferramenta, que poderá te auxiliar na escolha.

Conhecendo variáveis e constantes

O Python é uma das principais linguagens que possui tipagem dinâmica. A tipagem dinâmica é a característica que muitas linguagens de programação possuem por não exigirem que os tipos de dados sejam declarados, pois são capazes de realizar esta escolha dinamicamente. Desta forma, durante a execução do programa ou até mesmo durante a sua compilação, o tipo de uma variável poderá ser alterado.

Além disso, o Python possui como característica a tipagem forte, ou seja, a linguagem pode realizar conversões automaticamente entre todos os tipos suportados.

No Python os tipos suportados são:

  • Inteiro: Representado por toda e qualquer informação numérica que pertença ao conjunto de números inteiros relativos (números positivos, negativos ou o zero).
  • Float: Representado por números decimais, ou seja, números que possuem partes fracionadas.
  • String: É uma cadeia de caracteres que representam textos.
  • Booleano: Variáveis booleanas armazenam valores lógicos que podem ser verdadeiro ou falso.
  • Tipo complexo: armazenam dados com formato misto, ou seja, dados de diferentes tipos em uma mesma sentença.

Além disso, o Python possui características marcantes de regras de tipos e nomeação de variáveis, como podemos ver no artigo “Conhecendo variáveis e constantes no Python”.

Estruturas condicionais e estruturas de repetição em Python

Estruturas de condição são artifícios das linguagens de programação para determinar qual bloco de código será executado a partir de uma determinada condição. No Python, assim como em outras linguagens, podemos trabalhar com as seguintes estruturas de condição:

  • if: Visa verificar se determinada ação é verdadeira e executar o bloco de código contido em seu escopo;
  • if/else: Fará com que uma das ações sejam executadas, já que se a condição dentro do if não for verdadeira, será executado o código contido no else;
  • if/elif/else: Serve para verificar mais de uma condição no bloco de execução de um programa;
  • while: É uma estrutura de repetição que permite executar um determinado bloco de código enquanto uma condição for verdadeira;
  • for…in: O for executará um determinado bloco de código por um número definido de vezes. Esta estrutura é muito útil quando já sabemos a quantidade de vezes que precisamos executar determinado bloco de código.
  • for else e while else: O Python também permite adicionar o comando else depois de uma estrutura de repetição, seja ela um for ou um while. Este else serve para executar um determinado bloco de código imediatamente após a estrutura de repetição finalizar.

Aqui em nosso blog possuímos o artigo “Estruturas condicionais e de repetição no Python” onde exemplificamos cada uma das estruturas condicionais e de repetição para sua melhor visualização.

Orientação a objetos em Python

O paradigma de programação orientado a objetos é um dos principais paradigmas das linguagens de programação. Muito utilizado no mercado, entender como funciona e como implementar este paradigma é essencial para todo desenvolvedor de software.

No Python, este paradigma é amplamente utilizado e no artigo “Orientação a Objetos no Python” veremos como implementá-lo na linguagem.

Desenvolvedor Django Full-Stack
Formação: Desenvolvedor Django Full-Stack
Aprenda nesta formação como desenvolver aplicações complexas utilizando o Django, principal framework para desenvolvimento web de todo o ecossistema Python. Para isso, você verá desde os conceitos mais básicos, até conceitos mais avançados.
CONHEÇA A FORMAÇÃO

Principais Estruturas de Dados no Python

No Python, podemos utilizar diversos tipos de estruturas de dados. Estas estruturas resolvem um tipo de problema e podem ser úteis em diversas situações. As principais estruturas são as Listas, Sets, Dicionários e Tuplas.

  • Listas: Uma lista é a estrutura de dados mais básica do Python e armazena os dados em sequência, onde cada elemento possui sua posição na lista, denominada de índice;
  • Tupla: É uma estrutura bastante similar a uma lista, com apenas uma diferença: os elementos inseridos em uma tupla não podem ser alterados, diferente de uma lista onde podem ser alterados livremente;
  • Sets: São uma coleção de itens desordenada, parcialmente imutável e que não podem conter elementos duplicados. Por ser parcialmente imutável, os sets possuem permissão de adição e remoção de elementos;
  • Dicionários: São coleções de itens desordenados com uma diferença bem grande quando comparados às outras coleções (lists, sets, tuples, etc): um elemento dentro de um dicionário possui uma chave atrelada a ele, uma espécie de identificador.

Em nosso artigo “Principais estruturas de dados no Python” abordamos todos os conceitos listados acima e disponibilizamos exemplos para o melhor entendimento. Vale a pena a leitura.

Como instalar uma dependência com PIP e usar em seu projeto

O PIP é uma ferramenta para gerenciamento de pacotes de software escrito em Python. Todos os pacotes disponíveis para sua instalação podem ser encontrados no site do PIP.

Todo o processo de instalação de pacotes em projetos Python pode ser visto no artigo “Como instalar um pacote com PIP e utilizá-lo em seu projeto”.

Gerenciando pacotes em projetos Python com o PIP

Agora que já sabemos como instalar uma dependência com o PIP, precisamos entender como gerenciar várias dependências instaladas em nossa máquina.

Todo esse processo é visto em nosso artigo “Gerenciando pacotes em projetos Python com o PIP”.

Criando ambientes virtuais para projetos Python com o Virtualenv

É comum desenvolvermos mais de um projeto Python em nossa máquina e cada um desses projetos utilizem diferentes versões de um mesmo pacote.

Para manter as diferentes versões de um mesmo pacote instalados sem qualquer conflito em nossa máquina, precisamos criar ambientes virtuais para cada projeto e, assim, isolar os pacotes e suas versões. Para isso, utilizamos ambientes virtuais e todo processo de criação e gerenciamento podem ser vistos no artigo “Criando ambientes virtuais para projetos Python com o virtualenv”.


Python

Como instalar um pacote com PIP e utilizá-lo em seu projeto

O PIP é uma ferramenta para gerenciamento de pacotes de software escrito em Python.

Similar ao Composer (Gerenciador de pacotes do PHP), o PIP serve para instalar, remover, atualizar ou listar os pacotes instalados em um determinado projeto.

Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

Afinal, o que é um Gerenciador de Pacotes?

Com o objetivo de gerenciar bibliotecas externas em projetos, um gerenciador de pacotes, de forma resumida, nada mais é que um facilitador para instalação, remoção e atualização de pacotes externos em projetos.

Desta forma, um pacote contém todos os arquivos necessários para um módulo, e os módulos, por sua vez, são bibliotecas de código Python que você pode incluir em seu projeto.

Onde encontrar os pacotes?

No site do PIP é possível encontrar todos os pacotes disponíveis para sua instalação.

Nele basta pesquisar pelo pacote desejado. No exemplo abaixo, estaremos buscando o pacote “mysqlclient”, responsável pela conexão de banco de dados MySQL em scripts Python.

Instalar um pacote com PIP

A busca retornará todos os pacotes que possuem alguma relação com o pacote buscado.

Instalar um pacote com PIP

Ao selecionar o pacote desejado, será exibido uma página com toda a descrição do pacote (formas de instalação, documentação, versões, etc).

Instalar um pacote com PIP

Como definir os pacotes no projeto e instalar

O processo de instalação de um pacote com o PIP em um projeto Python é bem simples. Basta utilizar o comando pip install seguido do nome do pacote que o próprio gerenciador se encarregará de baixá-lo e realizar sua instalação.

Imagine que precisamos consumir um serviço REST com o Python, para isso existe uma ótima biblioteca chamada requests. Para realizar sua instalação, basta executar o seguinte comando no terminal:
pip install requests

Python - Orientação a objetos
Curso de Python - Orientação a objetos
CONHEÇA O CURSO

Agora, com o requests instalado, basta importá-lo e utilizá-lo, como podemos ver no exemplo abaixo:

import requests
import json

def buscar_dados():
    request = requests.get("http://localhost:3002/api/todo")
    todos = json.loads(request.content)
    print(todos)

if __name__ == '__main__':
    buscar_dados()

Conclusão

O PIP é um excelente gerenciador de pacotes para todo universo Python. Com ele é possível instalar, remover, listar e atualizar os pacotes em nossa máquina, como podemos ver no artigo Gerenciando pacotes em projetos Python com o PIP.

Se você quer conhecer mais sobre Python, acesse nosso guia da linguagem.


Flask

Como herdar templates com Jinja2

É comum que tenhamos diversas páginas que, muitas vezes, possui muitas características semelhantes entre elas, seja uma barra de navegação, arquivos de css e js, etc. Para compartilhar essas informações entre diferentes páginas, utilizamos o conceito de herança em nossos templates. Sendo assim, neste artigo veremos como herdar templates com Jinja2.

Criando template base

O primeiro passo para reaproveitar a base de um template utilizando a herança no Jinja2 é criar o template base. É este template que vai definir toda a estrutura base que os outros templates irão herdar.

Para isso, vamos criar um template chamado base.html em nossa aplicação Flask com o seguinte conteúdo:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Listagem</h1>
    {% block conteudo %}

    {% endblock conteudo %}
</body>
</html>

Dentro da tag body temos o que chamamos de blocos de conteúdo. São nestes blocos que adicionaremos os conteúdos das páginas que herdarão a página base.

Flask -  Templates com Jinja2
Curso de Flask - Templates com Jinja2
CONHEÇA O CURSO

Vale lembrar que podemos criar quantas tags forem necessárias, desde que possuam nomes diferentes para que possamos referenciá-las nos templates filhos.

Herdando o template base

Agora que já possuímos nosso template base, estamos prontos para herdá-lo e, assim, reaproveitar boa parte do código HTML nas páginas filhas do nosso projeto.

Para isso, é muito simples, basta definir qual o nome do template a ser herdado e qual conteúdo será inserido nos blocos definidos anteriormente.

Para exemplificar, teremos dois templates, um para listagem de funcionários e outro para listagem de clientes e seu código é bem similar, como podemos ver abaixo:

{% extends 'base.html' %}

{% block conteudo %}
    {% for cliente in clientes %}
        <h1>{{cliente}}</h1>
    {% endfor %}
{% endblock conteudo %}
{% extends 'base.html' %}

{% block conteudo %}
    {% for funcionario in funcionarios %}
        <h1>{{funcionario}}</h1>
    {% endfor %}
{% endblock conteudo %}

Basicamente, estamos definindo que estes arquivos herdarão do arquivo base.html criado anteriormente e, no bloco conteúdo, iremos adicionar as informações relativas às páginas em questão.

Flask - Fundamentos
Curso de Flask - Fundamentos
CONHEÇA O CURSO

Isso faz com que não precisemos, por exemplo, escrever toda a estrutura padrão de uma página HTML, apenas o conteúdo das páginas.

Com isso, criamos duas rotas para acessar as páginas com seus dados em questão, como podemos ver abaixo:

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/clientes")
def clientes():
    clientes = ["Cliente João da Silva", "Cliente Maria da Silva", "Cliente Joana da Silva",
                "Cliente Pedro da Silva", "Cliente José da Silva"]
    return render_template('clientes.html', clientes=clientes)

@app.route("/funcionarios")
def funcionarios():
    funcionarios = ["Funcionario João da Silva", "Funcionario Maria da Silva", "Funcionario Joana da Silva",
                "Funcionario Pedro da Silva", "Funcionario José da Silva"]
    return render_template('funcionarios.html', funcionarios=funcionarios)

if __name__ == "__main__":
    app.run()

Agora, ao acessar as rotas /clientes e /funcionarios, teremos o seguinte resultado:

Listagem de clientes

Listagem de funcionários

Toda a estrutura da página HTML criada no template base foi herdado, inclusive a string “Listagem” e apenas o conteúdo das páginas em questão foram alterados.

Agora, para cada página que precisemos criar, basta herdá-la do arquivo base.html e, assim, aproveitar toda a estrutura já pronta.


Python

Orientação a objetos em Python

O paradigma de programação orientado à objetos é um dos principais paradigmas das linguagens de programação. Muito utilizado no mercado, entender como funciona e como implementar este paradigma é essencial para todo desenvolvedor de software.

Python - Orientação a objetos
Curso de Python - Orientação a objetos
CONHEÇA O CURSO

No Python, o paradigma orientado à objetos funciona de forma similar às outras linguagens, porém com algumas mudanças em sua implementação, como veremos ao longo deste artigo.

Declarando classes

No paradigma orientado à objetos, uma classe é a representação de algo do mundo real. No Python, o uso de classes é algo constante no desenvolvimento de programas.

Sendo assim, para declarar uma classe no Python é bem simples, como podemos ver abaixo:

class Pessoa():
        # Atributos e métodos da classe

Como vimos acima, para declarar uma classe no Python, utilizamos a palavra reservada class seguido do nome desta classe.

No Python, todas as classes devem, por boas práticas, possuir nomes que comecem com letra maiúscula e, caso sejam compostos, a primeira letra de cada palavra deve ser maiúscula, o que chamamos de formato CamelCase:

class PessoaFisica():
    # Atributos e métodos da classe

Criando construtor da classe

Uma classe é representada por atributos e métodos. Os atributos de uma classe representam as características que esta classe possui, já os métodos representam o comportamento da classe.

Para declarar um atributo em uma classe no Python é bem simples, basta definir o nome do atributo no método especial chamado __init__, este método define o construtor da classe, ou seja, é onde definimos como uma nova pessoa será criada em nosso programa.

Para definir os atributos de uma classe em seu construtor, basta passá-los como parâmetro, como podemos ver abaixo:

class Pessoa:
    def __init__(self, nome, sexo, cpf):
        self.nome = nome
        self.sexo = sexo
        self.cpf = cpf

Agora, estamos indicando que toda pessoa que for criada em nosso programa e que utilize como base a classe Pessoa deverá possuir um nome, sexo e cpf.

Instanciando objetos

Como vimos anteriormente, as classes representam a estrutura de um elemento no mundo real, porém ela é apenas o modelo destes elementos.

Sempre que precisamos criar “algo” com base em uma classe, dizemos que estamos “instanciando objetos”. O ato de instanciar um objeto significa que estamos criando a representação de uma classe em nosso programa.

Para instanciar um objeto no Python com base em uma classe previamente declarada, basta indicar a classe que desejamos utilizar como base e, caso possua, informar os valores referentes aos seus atributos, como podemos ver abaixo:

class Pessoa:
    def __init__(self, nome, sexo, cpf):
        self.nome = nome
        self.sexo = sexo
        self.cpf = cpf

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456")
    print(pessoa1.nome)

Ao executar a linha pessoa1 = Pessoa("João", "M", "123456")estamos criando um objeto do tipo pessoa com nome “João”, sexo “M” e cpf “123456”.

Com isso, agora possuímos uma forma de criar diversas pessoas utilizando a mesma base, a classe Pessoa.

Ao executar o código acima e imprimir o nome dessa pessoa print(pessoa1.nome), teremos o seguinte retorno:

Instanciando objetos em Python

Declarando métodos

Como vimos anteriormente, uma classe possui atributos (que definem suas características) e métodos (que definem seus comportamentos).

Imagine que possuímos um atributo ativo na classe Pessoa. Toda pessoa criada em nosso sistema é inicializado como ativo, porém, imagine que queremos alterar o valor deste atributo e, assim, “desativar” a pessoa em nosso sistema e, além disso, exibir uma mensagem de que a pessoa foi “desativada com sucesso”.

Para isso, precisamos definir um comportamento para essa pessoa, assim, agora, ela poderá ser “desativada”.

Sendo assim, precisamos definir um método chamado “desativar” para criar este comportamento na classe Pessoa, como podemos ver abaixo:

class Pessoa:
    def __init__(self, nome, sexo, cpf, ativo):
        self.nome = nome
        self.sexo = sexo
        self.cpf = cpf
        self.ativo = ativo

    def desativar(self):
        self.ativo = False
        print("A pessoa foi desativada com sucesso")

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456", True)
    pessoa1.desativar()

Para criarmos este “comportamento” na classe Pessoa, utilizamos a palavra reservada def, que indica que estamos criando um método da classe, além do nome do método e seus atributos, caso possuam.

Depois disso, é só definir o comportamento que este método irá realizar. Neste caso, o método vai alterar o valor do atributo “ativo” para “False” e imprimir a mensagem “A pessoa foi desativada com sucesso”, como podemos ver abaixo:

Declarando métodos em Python

Declarando propriedades

Aparentemente o código acima funciona normalmente. Porém, temos um pequeno problema com o atributo “ativo”: ele é acessível para todo mundo. Ou seja, mesmo possuindo o método “desativar”, é possível alterar o valor do atributo “ativo” sem qualquer problema:

Declarando propriedades em Python

Este comportamento do nosso programa dá brechas para que um usuário possa ser ativado ou desativado sem passar pelo método responsável por isso. Por isso, para corrigir este problema, devemos recorrer a um pilar importantíssimo da Orientação à Objetos: o encapsulamento.

Basicamente, o encapsulamento visa definir o que pode ou não ser acessado de forma externa da classe.

Existem três tipos de atributos de visibilidade nas linguagens orientadas a objetos, que são:

  • Public: Atributos e métodos definidos como públicos poderão ser invocados, acessados e modificados através de qualquer lugar do projeto;
  • Private: Atributos e métodos definidos como privados só poderão ser invocados, acessados e modificados somente por seu próprio objeto.
  • Protected: Atributos e métodos definidos como protegidos só poderão ser invocados, acessados e modificados por classes que herdam de outras classes através do conceito de Herança, visto na última aula. Sendo assim, apenas classes “filhas” poderão acessar métodos e atributos protegidos.

No Python, diferente das linguagens completamente voltadas ao paradigma da orientação à objetos (Java, C#, etc.), estes atributos existem, mas não da forma “convencional”.

Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

Para definir um atributo público, não há necessidade de realizar nenhuma alteração, por padrão, todos os atributos e métodos criados no Python são definidos com este nível de visibilidade.

Já se precisarmos definir um atributo como privado, adicionamos dois underlines (__) antes do nome do atributo ou método:

class Pessoa:
    def __init__(self, nome, sexo, cpf, ativo):
        self.nome = nome
        self.sexo = sexo
        self.cpf = cpf
        self.__ativo = ativo

    def desativar(self):
        self.__ativo = False
        print("A pessoa foi desativada com sucesso")

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456", True)
    pessoa1.desativar()
    pessoa1.ativo = True
    print(pessoa1.ativo)

Porém, isso é apenas uma “convenção” do Python, ou seja, mesmo definindo o atributo com visibilidade privada (utilizando dois underlines antes de seu nome), ele poderá ser acessado de fora da classe:

Declarando propriedades em Python

Isso ocorre porquê estamos falando de “convenções”, ou seja, padrões que devem ser seguidos por desenvolvedores Python.

Porém, caso precisemos acessar os atributos privados de uma classe, o Python oferece um mecanismo para construção de propriedades em uma classe e, dessa forma, melhorar a forma de encapsulamento dos atributos presentes. É comum que, quando queremos obter ou alterar os valores de um atributo, criamos métodos getters e setters para este atributo:

class Pessoa:
    def __init__(self, nome, sexo, cpf, ativo):
        self.__nome = nome
        self.__sexo = sexo
        self.__cpf = cpf
        self.__ativo = ativo

    def desativar(self):
        self.__ativo = False
        print("A pessoa foi desativada com sucesso")

    def get_nome(self):
        return self.__nome

    def set_nome(self, nome):
        self.__nome = nome

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456", True)
    pessoa1.desativar()
    pessoa1.ativo = True
    print(pessoa1.ativo)

    # Utilizando geters e setters
    pessoa1.set_nome("José")
    print(pessoa1.get_nome())

Porém, ao tentar acessar o valor do atributo nome presente na classe, fica evidente que estamos obtendo esse dado através de um método. Pensando nisso, o time de desenvolvimento criou as Properties para prover um meio mais “elegante” para obter e enviar novos dados aos atributos de uma classe:

class Pessoa:
    def __init__(self, nome, sexo, cpf, ativo):
        self.__nome = nome
        self.__sexo = sexo
        self.__cpf = cpf
        self.__ativo = ativo

    def desativar(self):
        self.__ativo = False
        print("A pessoa foi desativada com sucesso")

        def get_nome(self):
        return self.__nome

    def set_nome(self, nome):
        self.__nome = nome

    @property
    def nome(self):
        return self.__nome

    @nome.setter
    def nome(self, nome):
        self.__nome = nome

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456", True)
    pessoa1.desativar()
    pessoa1.ativo = True
    print(pessoa1.ativo)

        # Utilizando geters e setters
    pessoa1.set_nome("José")
    print(pessoa1.get_nome())

    # Utilizando properties
    pessoa1.nome = "José"
    print(pessoa1.nome)
Python - Estrutura de dados - Parte 1
Curso de Python - Estrutura de dados - Parte 1
CONHEÇA O CURSO

Com isso, podemos ver o quão mais “limpo” é o uso das properties para acessar ou alterar o valor de uma propriedade privada das classes no Python.

Se você quer conhecer mais sobre Python, acesse nosso guia da linguagem.


Python

Estruturas condicionais e de repetição no Python

No artigo anterior, abordamos as variáveis e constantes no Python. Neste artigo, conheceremos suas estruturas condicionais e de repetição.

Estruturas de condição

Estruturas de condição são artifícios das linguagens de programação para determinar qual bloco de código será executado a partir de uma determinada condição. No Python, assim como em outras linguagens, podemos trabalhar com as estruturas de condição utilizando o if/else como veremos abaixo.

Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

if/else

O if e o else são comandos que verificam determinada condição na programação.

O uso do if em um programa em Python visa verificar se determinada ação é verdadeira e executar o bloco de código contido em seu escopo. Basicamente é feita da seguinte forma:

media = 7
if media > 6.9:
    print ("Você foi aprovado")

No exemplo do código acima, utilizamos apenas o if para verificar se a variável media é maior que 6.9. Como esta condição é verdadeira, imprimimos a mensagem na tela “Você foi aprovado”. Caso esta condição fosse falsa, o código seguiria normalmente ignorando, desta forma, a linha 3, o nosso print.

Já o uso o if/else fará com que uma das ações sejam executadas, já que se a condição dentro do if não for verdadeira, será executado o código contido no else. O if/else irá testar caso a condição seja verdadeira e executar uma determinada ação ou caso a mesma não seja executar outra.

media = 7
if media < 6.9:
    print ("Você foi reprovado")
else:
    print ("Você foi aprovado")

O código acima contém dois códigos a serem executados. Caso a media informada seja menor que 6.9, a pessoa será reprovada na disciplina, porém, caso a condição contida no if falhar, o código contido no else será executado. Desta forma, será exibido em tela que o aluno foi aprovado, já que a condição do if é falsa.

if…elif…else

O uso de if/elif/else serve para quando mais de uma condição precisar ser verificada. Imagine que possuímos duas condições: A primeira, se o aluno possuir uma média menor que 5 e a segunda, se a média for menor que 7 e maior que 5. Vimos anteriormente que utilizamos o if para testar se uma condição é verdadeira, porém, quando precisamos verificar uma segunda condição utilizamos o elif e adicionamos a condição a ser testada.

media = 7
if media < 5:
    print ("Você foi reprovado")
elif media > 5 and media < 7:
    print ("Você fará a recuperação")
else:
    print ("Você foi aprovado")

No código acima, o primeiro passo é verificar se a média do aluno é menor que 5 e, caso positivo, imprimir a mensagem que o mesmo foi reprovado. Porém, caso essa condição seja falsa, precisamos exibir se ele foi aprovado ou fará a recuperação.
Para isso, utilizamos o elif para testar se a média está entre os valores 5 e 7 e, caso positivo, imprimir a mensagem “Você fará a recuperação”.
Se a condição contida no if e elif forem falsas, o código contido no else será executado e imprimirá a mensagem “Você foi aprovado”.

Estruturas de Repetição

Estruturas de repetição são artifícios das linguagens de programação para executar um determinado bloco de código por uma certa quantidade de vezes, seja ela definida (utilizando o for) ou a partir de uma condição (utilizando o while).

while

O while é uma estrutura de repetição que permite executar um determinado bloco de código enquanto uma condição for verdadeira. É muito similar ao if, com a diferença que o bloco será executado enquanto a condição for verdadeira, e não se a condição for verdadeira.
Para isso, após o comando while precisamos definir uma condição que será testada a cada execução do seu loop. O while só será finalizado quando essa condição não for mais atendida.
Imagine que estamos desenvolvendo um controle de gastos e que, enquanto os gastos não somarem R$ 1000,00, nós poderemos adicionar novas contas. Este é um ótimo exemplo do uso do while, já que o bloco de código que será responsável por incrementar a quantidade dos gastos será executado enquanto a soma de todos os valores não for menor que 1000:

gastos = 0
valor_gasto = 0
while gastos < 1000:
    valor_gasto = int(input("Digite o valor do novo gasto"))
    gastos = gastos + valor_gasto

print(gastos)

O código acima irá executar o bloco contido no while enquanto sua condição for verdadeira, ou seja, enquanto a soma de gastos for menor que 1000, como podemos ver na imagem abaixo:

como funciona o while no python

for…in

Diferente do while, o for executará um determinado bloco de código por um número definido de vezes. Esta estrutura é muito útil quando já sabemos a quantidade de vezes que precisamos executar determinado bloco de código. Diferente da maioria das linguagens, para criar um intervalo de vezes que o for será executado, precisamos utilizar a função range e definir o intervalo, como podemos ver abaixo:

for i in range(1, 10):
    print(i)

O código acima irá executar o comando print enquanto o intervalo entre 1 e 10 não finalizar, como podemos ver na imagem abaixo:

como funciona o for...in no python

for else e while else

O Python também permite adicionar o comando else depois de uma estrutura de repetição, seja ela um for ou um while. Este else serve para executar um determinado bloco de código imediatamente após a estrutura de repetição finalizar:

como funciona o for else e while else no python

como funciona o for else e while else no python

O else dos códigos acima irão imprimir a mensagem “fim do loop” e “você gastou demais” imediatamente após o for e o while se encerrarem.

Se você quer conhecer mais sobre Python, acesse nosso guia da linguagem.


Python

Conhecendo variáveis e constantes no Python

Criado por Guido Van Rossum em meados dos anos 90, o Python é uma linguagem de programação de alto nível, multiplataforma e open source.

É uma linguagem que ganhou destaque nos últimos anos por possuir uma ótima curva de aprendizagem, ser uma linguagem leve e ter se tornado uma das principais linguagens para o desenvolvimento de IA, Machine Learning e Big Data (áreas em grande crescimento nos últimos anos).

Multiparadigma, ou seja, suporta diversos paradigmas de desenvolvimento, como, orientado a objetos, funcional, imperativo, interpretado, entre outros. Desta forma, com o Python um mesmo programa pode ser feito utilizando diferentes paradigmas ou um único programa poderá ser desenvolvido utilizando mais de um paradigma.

Neste artigo, conheceremos as variáveis e constantes da linguagem e aprenderemos como declará-las.

Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

Características de tipagem do Python

Toda linguagem de programação possui uma tipagem, que é basicamente um conjunto de regras que as define como: Tipagem estática ou dinâmica e forte ou fraca.

O Python é uma das principais linguagens que possui tipagem dinâmica. A tipagem dinâmica é a característica que muitas linguagens de programação possuem por não exigirem que os tipos de dados sejam declarados, pois são capazes de realizar esta escolha dinamicamente. Desta forma, durante a execução do programa ou até mesmo durante a sua compilação, o tipo de uma variável poderá ser alterado.

Além disso, o Python possui como característica a tipagem fraca, ou seja, a linguagem pode realizar conversões automaticamente entre todos os tipos suportados.

Tipos de Dados no Python

Como vimos anteriormente, o Python possui tipagem dinâmica, ou seja, suas variáveis podem armazenar dados de diferentes tipos. No Python os tipos suportados são:

Inteiro

O tipo inteiro é representado por toda e qualquer informação numérica que pertença ao conjunto de números inteiros relativos (números positivos, negativos ou o zero).

Exemplo:

inteiro = 15

print(type(inteiro)) # <class 'int'>

Float

O tipo float é representado por números decimais, ou seja, números que possuem partes fracionadas.

Exemplo:

ponto_flutuante =  25.10

print(type(ponto_flutuante)) # <class 'float'>

String

String é uma cadeia de caracteres que representam textos.

Exemplo:

nome = "Treinaweb"

print(type(nome)) # <class 'str'>

Booleano

Variáveis booleanas armazenam valores lógicos que podem ser verdadeiro ou falso.

Exemplo:

booleano = True

print(type(booleano)) # <class 'bool'>


Tipo complexo

As variáveis de tipo complexo armazenam dados com formato misto, ou seja, dados de diferentes tipos em uma mesma sentença.

Exemplo:

complexo = 25 + 3j

print(type(complexo)) # <class 'complex'>

Python - Orientação a objetos
Curso de Python - Orientação a objetos
CONHEÇA O CURSO

Regras de nomeação de variáveis

A linguagem de programação Python possui como regra de nomeação de variáveis o formato snake_case.

Este formato determina que o nome das variáveis possuam um padrão em que, as palavras sejam definidas em letras minúsculas e, caso possua, os espaços serão substituídos por “underline” conforme podemos verificar abaixo:

variavel_com_nome_composto = "Treinaweb" 

print(variavel_com_nome_composto) # Treinaweb

Declarando variáveis

A declaração de variáveis no Python é um processo muito simples. Por não possuir um escopo padrão para seus scripts, basta definir o nome da variável e, em seguida, atribuir o valor desejável:

nome_da_variavel = "valor_da_variavel"

Declarando constantes

A regra de nomeação das constantes no Python segue um padrão parecido com as de variáveis, com a diferença de que todas as letras são maiúsculas e separadas por underline “_”. Porém, por possuir tipagem dinâmica, os valores atribuídos à constantes podem ser alterados sem problemas:

MINHA_CONSTANTE = 10

print(MINHA_CONSTANTE) # 10

MINHA_CONSTANTE = 15

print(MINHA_CONSTANTE) # 10

Conclusão

Como vimos nesse artigo, o Python possui tipagem dinâmica e fraca, o que permite que uma variável possa armazenar dados de diferentes tipos em fases diferentes do script. Isso torna o processo de desenvolvimento mais simples, já que não precisamos nos preocupar com o tipo que uma variável vai armazenar, mas pode criar uma bagunça generalizada, caso você use uma variável para várias tarefas em seu programa, então é bom tomar cuidado e, principalmente, ser organizado quanto ao seu desenvolvimento.

Se você quer conhecer mais sobre Python, acesse nosso guia da linguagem.


Django

O que é Django Template Language?

O Django Template Language (DTL) é o Template Engine padrão do Django, responsável por criar páginas HTML em projetos com o framework.

Escrito em Python, o DTL tem como objetivo auxiliar na criação de páginas HTML em aplicações Django. Basicamente, ele serve para permitir que as informações trocadas entre uma aplicação escrita em Django e suas páginas HTML sejam feitas de forma mais simples e intuitiva.

Django - Templates
Curso de Django - Templates
CONHEÇA O CURSO

Desta forma, garante ao desenvolvedor que a criação de templates para suas aplicações sejam feitas de forma mais rápida. É um template engine projetado para encontrar o “equilíbrio” entre poder e facilidade, sendo de fácil aprendizagem aos desenvolvedores que já possuírem facilidade em trabalhar com o HTML ou com outros templates engines, como o Jinja2 ou o Smarty.

Você sabe o que é um Template Engine?

Basicamente, uma template engine serve para facilitar a criação de páginas HTML e tornar o envio e exibição de informações para estas páginas um processo mais simples e organizado.

Traz como vantagens, se comparada ao uso de HTML puro, as seguintes características:

  • Maior velocidade na criação de templates;
  • Melhor reaproveitamento de código HTML;
  • Uso de tipos de dados nativos em páginas HTML;
  • Uso de recursos das linguagens de programação em páginas HTML (estruturas de condição, repetição, etc), entre outros.

Desta forma, com o seu uso, podemos utilizar recursos das linguagens de desenvolvimento para criar páginas HTML, como estruturas de condição, estruturas de repetição, herança, etc, facilitando a criação da camada de visualização de dados em uma aplicação.

Características do Django Template Language

Conforme vimos no tópico anterior, uma template engine facilita para que linguagens de programação sejam incorporadas em páginas HTML.

Desta forma, ao utilizar o DTL podemos facilmente incorporar códigos Python de aplicações Django em templates HTML.

Como principais características podemos citar:

  • Permite a criação de filtros para transformar o conteúdo de variáveis exibidas nos templates;
  • Com o Django Template Language é possível incluir tags para melhorar a estrutura das páginas HTML da aplicação;
  • Permite reaproveitar páginas HTML de diferentes templates e assim melhorar a reusabilidade do código;
  • Permite utilizar estruturas de condição e repetição em páginas HTML, entre outros.

Exemplo de uma página HTML com o Django Template Language

{% extends "base_generic.html" %}

{% block title %}{{ section.title }}{% endblock %}

{% block content %}
<h1>{{ section.title }}</h1>

{% for story in story_list %}
<h2>
  <a href="{{ story.get_absolute_url }}">
    {{ story.headline|upper }}
  </a>
</h2>
<p>{{ story.tease|truncatewords:"100" }}</p>
{% endfor %}
{% endblock %}

Como podemos verificar o código acima, o Django Template Language permite utilizar diferentes recursos em páginas HTML, como a herança (extends), blocos de conteúdo (block), estruturas de repetição (for) e filtros (upper e truncatewords), garantindo um poder muito maior para a criação de páginas web.

Django - Fundamentos
Curso de Django - Fundamentos
CONHEÇA O CURSO

Podemos então concluir…

Como podemos acompanhar durante todo o artigo, o Django Template Language fornece meios para que as páginas HTML desenvolvidas em projetos Django sejam mais simples de desenvolver e com recursos muito mais avançados, quando comparados ao HTML puro.

Toda a documentação do Django Template Language pode ser acessada na própria documentação do Django na sessão do Django Template Language.


Desenvolvimento Python

Instalação do Python e nosso primeiro Olá Mundo

Neste artigo vamos ver como realizar a instalação do Python nos sistemas Windows, Linux e MacOS, além disso vamos ver como escrever e executar nosso primeiro programa com a linguagem Python.

O que é o Python?

O Python é uma linguagem de programação de alto nível e que tem como principal princípio permitir uma alta legibilidade de código através de uma sintaxe simples, porém, poderosa e que permite que programadores desenvolvam suas soluções utilizando poucas linhas de código. A linguagem Python foi desenvolvida por Guido Van Rossum no final dos anos 80.

O Python possui as seguintes características:

  • Open Source
  • Multiplataforma
  • Linguagem Interpretada
  • Tipagem Dinâmica
  • Tipagem Forte
  • Multiparadigma
  • Multinicho

Além disso a linguagem Python possui uma curva de aprendizado muito pequena e é bastante reconhecida pela sua comunidade diversa, acolhedora e bastante ativa.

Desenvolvedor Python
Formação: Desenvolvedor Python
Aprenda os principais conceitos do Python (uso de variáveis, estruturas condicionais e estruturas de decisão), como trabalhar com orientação à objetos (métodos, construtores, destrutores, classes, herança, polimorfismo e duck-typing), estruturas de dados (Listas, Filas, Pilhas, Árvores Binárias, Dicionários, Conjuntos, Tabelas de Espalhamento e Mapas), banco de dados relacionais (DB API e SQLAlchemy) e como criar aplicações desktop com o Kivy.
CONHEÇA A FORMAÇÃO

Caso queira saber mais sobre a linguagem Python recomendo o artigo O que é o Python?.

Como instalar o Python no Windows

A instalação do Python no Windows segue o padrão da maioria dos programas instalados no sistema operacional em questão (next, next, next, finish) com uma única ressalva: no início do processo de instalação, deve-se selecionar a opção “Add Python 3.8 to PATH”. Com isso, o Windows saberá onde está localizado o interpretador do Python e, assim, conseguiremos utilizá-lo sem problemas.

  1. Acesse a página oficial para realizar o download do instalador do Python na versão 3.8.
  2. Vá até a pasta na qual foi feito o download do instalador do Python 3.8.
  3. Clique com o botão direito em cima do instalador.
  4. Clique na opção “Executar como Administrador”.
  5. Com o instalador aberto tenha a certeza de ter marcado as opções “Add Python 3.8 to PATH” para que o comando python fique disponível.
  6. Por fim clique em “Install Now” e siga o processo padrão de instalação de programas no Windows (next, next, next, finish).

Print da tela do assistente de instalação do Python com a opção "Add Python 3.8 to PATH" marcada

Para verificar se a instalação foi realizada com sucesso basta abrir algum terminal do Windows (Prompt de Comando ou Power Shell) e digitar o comando abaixo:

python --version

Caso nenhum erro seja exibido, isso significa que a instalação do Python foi realizada com sucesso.

Windows - Fundamentos para desenvolvedores
Curso de Windows - Fundamentos para desenvolvedores
CONHEÇA O CURSO

Como instalar o Python no Linux

A instalação do Python em ambientes Linux também é bem simples.

Por padrão, o Python já vem instalado nos sistemas baseados em Debian (como o Ubuntu e o Mint), porém dependendo da versão do seu sistema você terá uma versão diferente do Python. Sendo assim, primeiramente devemos verificar se o Python está instalado na nossa máquina e em qual versão. Para isso, execute o comando abaixo para verificar a existência (ou não) do Python 3.8:

python3 --version

Ao executar o comando acima, será retornado a versão do Python 3 instalado em sua máquina. Caso seja retornado algum erro, isso indica que o interpretador do Python ainda não está instalado.

Caso seja retornada uma versão inferior ao Python 3.8 fica sendo sua decisão instalar uma versão mais recente ou não, qualquer versão superior ou igual a versão 3.6 já é o suficiente para desenvolver seus projetos utilizando a grande maioria dos recursos da linguagem.

Sendo assim, caso necessite realizar a instalação, basta executar o seguinte comando:

sudo apt install python3.8

Este comando irá instalar o interpretador do Python em sua versão 3.8.x.

Caso você já tenha uma versão do Python instalada no seu Linux e mesmo assim optou por instalar a versão 3.8, o seu sistema operacional terá duas versões do Python, uma versão é a padrão do sistema que pode ser acessado através do comando python3 e a outra versão é a que foi instalada por você que será acessível através do comando python3.8.

Como instalar o pip

Além disso precisamos instalar o pip, pois diferente dos assistentes de instalação do Python para os sistemas Windows e MacOS ao instalar o Python via apt no Linux a ferramenta pip não é instalada em conjunto.

O pip é um gerenciador de pacotes para projetos Python, é através dele que podemos instalar, remover e atualizar pacotes em nossos projetos, para saber mais sobre o pip recomendo a leitura do artigo Gerenciando pacotes em projetos Python com o PIP.

Para realizar a instalação do pip execute o comando abaixo:

sudo apt install python3-pip

Como instalar o venv

Caso você esteja em um sistema derivado do Debian como o Ubuntu por exemplo, é necessário instalar os binários da biblioteca venv caso você queira utilizar ambientes virtuais em seu ambiente de desenvolvimento, para saber mais sobre ambientes virtuais aqui mesmo no blog da TreinaWeb temos o artigo Criando ambientes virtuais para projetos Python com o Virtualenv.

Para realizar a instalação dos binários da biblioteca venv basta executar o comando abaixo:

sudo apt install python3-venv
Linux - Fundamentos para desenvolvedores
Curso de Linux - Fundamentos para desenvolvedores
CONHEÇA O CURSO

Como instalar o Python no MacOS

A instalação do Python em ambientes MacOS segue a mesma ideia do Windows, onde o processo de instalação é o “padrão” (next, next, next, finish), para realizar o download do instalador acesse o site oficial do Python. Ao final do processo, podemos abrir o terminal do Mac e com o comando abaixo, verificar se a instalação foi feita com sucesso.

python3 --version

Caso nenhum erro seja exibido isso significa dizer que a instalação do Python foi realizada com sucesso.

macOS - Fundamentos para desenvolvedores
Curso de macOS - Fundamentos para desenvolvedores
CONHEÇA O CURSO

Criando nosso primeiro Olá Mundo

Agora que já temos o Python instalado em nossa máquina, vamos escrever nosso primeiro código em Python que será um simples Olá Mundo. Esse simples código que vai exibir a mensagem “Olá Mundo” tem como objetivo principal verificar se nosso ambiente de desenvolvimento está configurado de maneira adequada.

Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

Hora de escrever nosso Olá Mundo

Para escrevermos nosso código vamos precisar de algum editor de código fonte ou uma IDE, eu irei utilizar o editor de código Visual Studio Code, caso queira saber como instalar esse editor na sua máquina veja o artigo Instalação do VS Code no Windows, Linux e MacOS.

Para desenvolver um código em Python é necessário criar um arquivo com a extensão .py, para escrever o nosso código irei criar um arquivo chamado ola_mundo.py e abri-lo no VS Code, é possível realizar ambas as ações com um único comando:

code ola_mundo.py

Após executar o comando acima o VS Code irá abrir já com o arquivo criado e aberto para que possamos escrever nosso código.

Animação demonstrado a execução do comando para abrir o arquivo ola_mundo.py pelo VS Code

Na linguagem Python quando queremos exibir alguma mensagem na tela durante a execução do nosso código utilizamos a função print e passamos como parâmetro dessa função uma String contendo a mensagem a ser exibida.

print("Olá Mundo")

E com uma única linha de código o nosso Olá Mundo já está pronto, essa é uma das grandes vantagens do Python, ele nos permite desenvolver nossas aplicações com pouquíssimas linhas de código e não precisamos colocar o ponto e vírgula no final da instrução.

Vamos executar nosso Olá Mundo

Agora que nosso código já está pronto precisamos “pedir” para o interpretador do Python executar o nosso arquivo ola_mundo.py, para isso execute o comando abaixo no seu terminal, mas antes de executar o comando não esqueça de salvar o arquivo.

python3 ola_mundo.py
Caso você esteja no Windows deverá utilizar o comando python ao invés de python3.

Pronto, com isso nosso código será executado e a mensagem “Olá Mundo” será exibida no seu terminal.

Animação demonstrando a execução do arquivo ola_mundo.py pelo interpretador da linguagem Python

Conclusão

Neste artigo vimos como é realizada a instalação do Python nos sistemas Windows, Linux e MacOS, além disso escrevemos e executamos o nosso primeiro Olá Mundo para assim garantirmos que todo o nosso ambiente de desenvolvimento foi configurado corretamente.

Mais informações a respeito do Python, basta acessar a documentação da linguagem, também temos alguns outros artigos sobre a linguagem Python e suas funcionalidades:

Se você quer conhecer mais sobre Python, acesse nosso guia da linguagem.


Flask

Como enviar e exibir dados em templates com Jinja2

No último artigo, vimos o que é e o quão fantástico é a template engine Jinja2. Vimos que ela facilita (e muito) nosso trabalho quando precisamos criar templates para aplicações Python. Dando continuidade à nossa série de artigos sobre o Jinja2, agora veremos como enviar e exibir dados com Jinja2 em aplicações Flask.

Aplicação base

Vamos utilizar como base a aplicação vista no artigo que explica como retornar páginas HTML em aplicações Flask. É uma aplicação simples que recebe uma requisição e devolve como resposta uma página HTML, todo o processo de criação pode ser visto no artigo citado.

Enviando dados

Agora que já sabemos como retornar arquivos HTML em aplicações Flask, vamos entender como enviar dados para serem exibidos nestes templates.

Flask - Fundamentos
Curso de Flask - Fundamentos
CONHEÇA O CURSO

Para isso, basta enviar a variável que queremos como podemos ver no código abaixo:

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/teste")
def index():
    nome_da_variavel = "Treinaweb"
    return render_template('index.html', variavel=nome_da_variavel)

if __name__ == "__main__":
    app.run()

Como visto acima, para enviar uma variável para um template, basta adicioná-la como parâmetro do método render_template.

Exibindo dados no template

Agora que já sabemos como enviar variáveis para nossos templates, precisamos exibir as informações. Para isso, basta acessar a variável no template da seguinte forma:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Olá {{variavel}}</h1>

</body>
</html>

Para exibir o valor de uma variável, basta adicioná-la entre chaves duplas {{}}. Com isso, ao acessar a rota /teste teremos o seguinte resultado:

Exibindo dados no template

Flask -  Templates com Jinja2
Curso de Flask - Templates com Jinja2
CONHEÇA O CURSO

Vale lembrar que podemos enviar qualquer tipo de variável, seja uma lista, tupla, etc, como podemos ver abaixo:

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/teste")
def index():
    nome_da_variavel = [1, "Treinaweb"]
    return render_template('index.html', variavel=nome_da_variavel)

if __name__ == "__main__":
    app.run()

Para exibir as informações, basta acessar pela posição, como podemos ver abaixo:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Olá {{variavel[0]}} {{variavel[1]}}</h1>

</body>
</html>

Conclusão

Neste artigo, vimo como enviar e exibir dados com Jinja2, recurso que facilita (e muito) o desenvolvimento dos nossos templates. No próximo artigo dessa série, veremos como utilizar estruturas de repetição e condição.


Python

O que é o Jinja2?

O Jinja2 é um template engine escrito em Python que facilita a criação de páginas HTML em aplicações Python. Basicamente, ele serve para permitir que as informações trocadas entre uma aplicação escrita em Python e suas páginas HTML seja feita de forma mais simples e intuitiva, garantindo que o desenvolvedor consiga criar templates de forma mais fácil para suas aplicações.

Características

A principal funcionalidade de um template engine é permitir que linguagens de programação possam ser incorporadas em páginas HTML.
Com isso, uma template engine permite que os programadores possam utilizar estruturas de condição, estruturas de repetição, herança e diversos outros recursos presentes apenas nas linguagens de programação em páginas HTML.

Flask - Fundamentos
Curso de Flask - Fundamentos
CONHEÇA O CURSO

Com o Jinja2 isso não é diferente, essa template engine permite incorporar código Python em páginas HTML e, mais do que isso, utilizar as principais características da linguagem em seus templates.
Dentre diversas características, podemos citar as principais:

  • Permite o uso de estruturas de condição e repetição em páginas HTML;
  • Com o Jinja2 é possível utilizar herança de layouts, garantindo uma estrutura com o maior reaproveitamento de código possível;
  • Permite exibir o conteúdo de variáveis Python em páginas HTML;
  • Sistema de blocos de templates, dentre outros.

Como funciona o Jinja2

Basicamente, quando criamos um template com Jinja2 e incorporamos código Python nas páginas HTML, a própria ferramenta traduz o código Python e incorpora à página HTML, já que o Browser não consegue exibir código diferente do HTML.

Sendo assim, um código utilizando o Jinja2 como podemos ver abaixo é convertido em um HTML:

<ul>
{% for user in users %}
  <li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>
<ul>
    <li><a href="http://url_da_pagina/1"> João </a></li>
    <li><a href="http://url_da_pagina/2"> Maria </a></li>
    <li><a href="http://url_da_pagina/3"> José </a></li>
    <li><a href="http://url_da_pagina/4"> Neuza </a></li>
    <li><a href="http://url_da_pagina/5"> Geraldo </a></li>
</ul>

Com isso, podemos notar o quão poderosa é essa ferramenta. Com ela podemos utilizar os principais recursos das linguagens de programação para a criação de páginas HTML.

Quem utiliza?

O Jinja2 é muito utilizada em todo ecossistema Python, tendo seu principal “cliente” o Flask, um dos maiores frameworks do mundo.
Ele é incorporado ao Flask por padrão, o que o torna seu principal sistema de templates, permitindo a criação de páginas HTML em conjunto com os recursos do Python.

Flask -  Templates com Jinja2
Curso de Flask - Templates com Jinja2
CONHEÇA O CURSO

Sendo assim, sempre que você criar uma nova aplicação com Flask, por padrão, está utilizando o Jinja2.

Conclusão

Como vimos neste artigo, o Jinja2 é um ótimo template engine e que permite a criação de páginas HTML utilizando os principais recursos do Python.
Agora que vimos o que é e os principais recursos do Jinja2, no próximo artigo exploraremos alguns destes recursos para incrementar o front-end da aplicação.


Python

Consumindo APIs com Python – Parte 2

Vimos no último artigo como buscar dados em APIs externas utilizando o Python e o quão simples este processo é. Agora, para completar o CRUD, veremos como inserir, editar e remover itens de uma API externa com Python e, com isso, entender o processo de consumir APIs com Python.

Cadastrando dados em uma API

Como vimos no artigo anterior, nossa API irá armazenar tarefas a serem realizadas. Estas tarefas são compostas por um título e uma descrição.

Sendo assim, para cadastrar uma tarefa na API, precisamos seguir o mesmo padrão que a API espera como requisição. Para isso, para inserir dados na API, basta enviar uma requisição do tipo POST (para cadastar dados) com um objeto do tipo Tarefa (possuindo título e descrição).

Para isso, o primeiro passo é criar uma classe Tarefa e definir, em seu construtor, os atributos título e descrição, como podemos ver abaixo:

class Tarefa():
    def __init__(self, titulo, descricao):
        self.titulo = titulo
        self.descricao = descricao

Agora, basta enviar uma requisição para a API utilizando o verbo POST e, em seu corpo (utilizando o atributo data ), converter o objeto do tipo tarefa para um json, como podemos ver abaixo:

import requests
import json
import tarefa

def buscar_dados():
    request = requests.get("http://localhost:3002/api/todo")
    todos = json.loads(request.content)
    print(todos)
    print(todos[0]['titulo'])

def cadastrar_dados(tarefa):
    requests.post("http://localhost:3002/api/todo",
                  data=json.dumps(tarefa.__dict__))

if __name__ == '__main__':
    cadastrar_dados(tarefa.Tarefa("Escrever o artigo de Python", "Segunda parte"))
    buscar_dados()

Python - Orientação a objetos
Curso de Python - Orientação a objetos
CONHEÇA O CURSO

Para que um objeto Python possa ser convertido para um json, precisamos utilizar o __**dict**__ para este objeto como parâmetro do método dumps() do pacote json. Agora, ao executar o código acima, a tarefa será cadastrada em nossa API, como podemos ver abaixo:

Cadastrando dados na API

Editando dados em uma API

O processo de edição consiste em enviar o id de uma tarefa (que será editada) na url da requisição e os novos dados da tarefa a ser editada. É uma mistura dos métodos cadastrar_dados() e listar_dados_id() .

Para isso, o verbo HTTP utilizado para este tipo de requisição é o PUT , responsável por editar dados em uma API. Sendo assim, o código responsável por editar dados em uma API utilizando o python pode ser visto abaixo:

def editar_dados(id, tarefa):
    requests.put(f"http://localhost:3002/api/todo?id={id}",
                 data=json.dumps(tarefa.__dict__))

Como podemos ver acima, o processo é bem simples, basta enviar o id da tarefa e os dados a serem editados.

Django - Fundamentos
Curso de Django - Fundamentos
CONHEÇA O CURSO

O resultado da execução pode ser visto abaixo:

Editando dados na API

Removendo dados de uma API

A remoção de elementos também é muito simples. Basta enviar uma requisição utilizando o verbo DELETE do HTTP com o id da tarefa que queremos remover:

def remover_dados(id):
    requests.delete(f"http://localhost:3002/api/todo?id={id}")

Agora, ao executar o método desenvolvido, já estamos prontos para remover dados da API:

Removendo dados de uma API

Conclusão

O uso de APIs em um projeto é de grande importância, visto que há casos em que precisamos obter dados de servidores remotos para utilizar em nossos projetos. No Python, o processo de consumir APIs com Python é bem simples como pudemos ver em todo o artigo.


Python

Consumindo APIs com Python – Parte 1

Há casos em que precisamos consumir dados de um servidor remoto para incrementar uma aplicação utilizando APIs externas. No Python este processo é muito simples e neste artigo vamos aprender a consumir APIs com Python.

O que são APIs?

Uma API, basicamente, é um conjunto de padrões de requisições e respostas que facilitam a construção de aplicações. Elas são responsáveis por retornar vários tipos de informações, existem APIs para retornar o clima de uma determinada cidade, o preço do dólar em um país, etc.

Possuímos aqui no blog um ótimo artigo que exemplifica muito bem o que é e como funciona uma API.

Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

API utilizada

Para simular uma API completa, vamos utilizar o tw-dev-server , uma aplicação desenvolvida pelo Akira Hanashiro para simular uma API e, assim, conseguir realizar requisições HTTP e testar nossa aplicação.

Aqui no blog possuímos um artigo que explica todo o processo de instalação e uso do tw-dev-server, é muito importante que você leia e execute a aplicação em sua máquina.

Criando e configurando projeto

Agora que já possuímos a API rodando em nossa máquina, estamos prontos para consumí-la utilizando o Python. Para isso, vamos partir de uma aplicação muito simples, apenas um arquivo chamado main.py :

Criando projeto base

O primeiro passo, então, é instalar a biblioteca requests, responsável por enviar requisições HTTP com o Python. Para isso, com o pip instalado, basta executar o seguinte comando no terminal do próprio PyCharm:

pip install requests

Instalando biblioteca requests

Python - Orientação a objetos
Curso de Python - Orientação a objetos
CONHEÇA O CURSO

Criando registros na API

Para buscar os dados de uma API com Python é bem simples. Primeiramente, vamos criar alguns registros na API utilizando o próprio GUI do tw-dev-server na seguinte URL: https://treinaweb.github.io/tw-dev-server/.

Vale lembrar que o servidor precisa estar rodando em sua máquina para que tudo funcione corretamente:

Servidor do tw-dev-server rodando

Agora, basta criar alguns registros na API utilizando o navegador. Para isso, é só enviar uma requisição do tipo POST com os dados do registro. No meu caso, criei uma API de tarefas com título e descrição:

Cadastrando dados na API

Buscando dados de uma API

Agora, com a API pronta e com registros, podemos buscar estes dados utilizando o Python. Para isso, vamos criar um método chamado buscar_dados() em nosso projeto. Este método irá utilizar a biblioteca requests para enviar uma requisição GET (verbo responsável por informar à API que queremos listar seus dados) para a rota definida na API (no meu caso http://localhost:3002/api/todo):

import requests

def buscar_dados():
    request = requests.get("http://localhost:3002/api/todo")
    print(request.content)
Django - Fundamentos
Curso de Django - Fundamentos
CONHEÇA O CURSO

Depois, basta adicionar como parâmetro do print o conteúdo da variável request. Agora, para executar o método buscar_dados() quando executarmos o arquivo main.py, basta adicionar a chamada no seguinte bloco de código:

import requests

def buscar_dados():
    request = requests.get("http://localhost:3002/api/todo")
    print(request.content)

if __name__ == '__main__':
    buscar_dados()

Com isso, estamos enviando uma requisição do tipo GET (para buscar dados) para a rota http://localhost:3002/api/todo e, com isso, buscando todos os dados daquela API.

Agora, ao executar o arquivo main.py teremos o seguinte retorno:

Dados retornados da API

No terminal do PyCharm, podemos ver o conteúdo da API sendo impresso, o que significa que a requisição foi feita com sucesso.

Porém, esta resposta é exibida em bytes, se quisermos convertê-la para um formato de dicionário e, assim, acessar seus atributos de uma forma mais simples, basta utilizar a biblioteca json do próprio Python:

import requests
import json

def buscar_dados():
    request = requests.get("http://localhost:3002/api/todo")
    todos = json.loads(request.content)
    print(todos)
    print(todos[0]['titulo'])

if __name__ == '__main__':
    buscar_dados()

Esta biblioteca, basicamente, converte a resposta de bytes para um dicionário do Python, facilitando o acesso aos atributos de forma individual:

Convertendo resposta da API

Filtrando dados por ID

Há casos em que precisamos buscar um dado a partir do seu ID (ou qualquer outro atributo). Nestes casos, podemos enviar uma requisição com o verbo GET com o parâmetro que precisamos filtrar.

Utilizando o tw-dev-server, para filtrar os registros, enviamos este parâmetro na rota da requisição, como podemos ver abaixo:

import requests
import json

def buscar_dados_id(id):
    request = requests.get(f"http://localhost:3002/api/todo?id={id}")
    todo = json.loads(request.content)
    print(todo)
    print(todo['titulo'])

if __name__ == '__main__':
    # buscar_dados()
    buscar_dados_id("h7i39LVliST6r8kI")

Com isso, ao executar o código acima, será retornado apenas a todo com o id passado como parâmetro:

Filtrando dados da API

Conclusão

Como vimos acima, é muito simples consumir uma API com o Python, bastando apenas informar a rota desejada e qual verbo será utilizado para esta requisição. Neste artigo vimos como listar dados da API, no próximo artigo desta série veremos como cadastrar, editar e remover dados de uma API remota com o Python. Até lá! 😀