DEV Community

Cover image for Flask Command Line Interface
DrxwHe4rt
DrxwHe4rt

Posted on

Flask Command Line Interface

Nesse artigo, iremos explorar o CLI do micro-framework flask. Para quem não conhece, o flask é um framework web, está para o python assim como o express está para o node.

Entendendo o CLI...

  • Ao instalar do Flask, automaticamente, será instalado uma interface de linha de comando Click, em seu virtualenv (ambiente virtual);
  • Click é um pacote feito para criar comandos personalizados para sua aplicação Flask escrevendo o minimo possivel.

Semelhante aos comandos que o framework django possui para criar super-usuarios, criar apps, etc. o Click possibilita fazermos isso e o melhor é que podemos ir além e criar nossos proprios comandos, agilizando o desenvolvimento de nossos projetos.

Dependencias

  • Virtualenv
  • Flask

OBS: Irei partir da premissa de que você ja esta familiarizado com a configuração do ambiente e instalação das dependencias.

Sua estrutura de pastas deve ficar parecida com a minha:

pastas

Dentro do arquivo __ init __.py escreva o codigo da seguinte forma:


# flask imports
from flask import Flask


def create_app():
    '''
        Função para criar um aplicativo Flask
    '''

    # Instanciando a o objeto Flask()
    app = Flask(__name__)

    # retornando o objeto app
    return app

Enter fullscreen mode Exit fullscreen mode

Agora, dentro do arquivo settings.py iremos criar o nosso comando. O mesmo será responsável por criar apps em nossa aplicação, sem precisarmos criar arquivo por arquivo.

Contextualizando...

Como flask é um micro-framework, o mesmo vem apenas com o basico para criarmos uma aplicação web, dessa forma, não temos tantas ferramentas prontas, como o django, por exemplo. No django, ao executarmos o comando django-admin startapp criamos uma app dentro do diretorio em que você esta, contendo dentro dessa app os arquivos necessários para que possamos trabalhar, agilizando o processo de criação de nossa aplicação.

Dito isso, iremos fazer algo parecido para nossa aplicação flask, sem muita complexidade e de forma intuitiva, para que vocês possam ver como funciona o CLI do Flask.

Dessa forma, dentro do arquivo settings.py, iremos inserir o seguinte codigo:

# python imports
import os
import subprocess

# flask imports
import click
from flask import request, Blueprint


# Registrando blueprint
bp_settings = Blueprint('settings', __name__)

@bp_settings.cli.command("startapp")
@click.argument("name")
def create_folder_app(name):
    '''
        Essa função cria uma app dentro
        do projeto, ja com os arquivos
        necessarios para trabalhar.

        Exemplo: flask startapp <nome_da_app>

        Dentro da pasta contém os arquivos: 
            - '__init__.py' -> arquivo __init__.py 
            dentro de um subdiretório será sempre o 
            primeiro a ser executado quando um módulo 
            dentro deste subdiretório for chamado;

            - 'views.py' -> arquivo responsavel por
            conter a logica de cada app;

            - 'models.py' -> arquivo que contém uma classe
            que abstrai em modelo uma tabela do banco de dados;

            - 'forms.py' -> arquivo que pode ser usado
            para abstrair os forms HTML, utilizando a 
            lib Flask-WTForms.

        Foi utilizado a função click do 
        flask, responsável por criar
        comandos e argumentos para a 
        aplicação.
    '''

    # Atribuindo o argumento recebido
    # na variavel "name"
    name=name

    try:
        # Acessando a pasta 'app'
        here = os.path.dirname(os.path.dirname(__file__))

        # Setando o caminho e o nome
        # dos arquivos que serão criados
        filepath_init = os.path.join(here, f'{name}', '__init__.py')
        filepath_views = os.path.join(here, f'{name}', 'views.py')
        filepath_models = os.path.join(here, f'{name}', 'models.py')
        filepath_forms = os.path.join(here, f'{name}', 'forms.py')

        # Criando pasta
        os.mkdir(os.path.join(here, f'{name}'))
        try:
            # Criando os arquivos
            f = open(filepath_init, 'w')
            f = open(filepath_views, 'w')
            f = open(filepath_models, 'w')
            f = open(filepath_forms, 'w')

            print('App criada com sucesso')
        except IOError as e:
            print(e)
    except IsADirectoryError as e:
        print(e)

Enter fullscreen mode Exit fullscreen mode

Resumidamente, o codigo acima cria uma app dentro da pasta app do projeto, contendo os arquivos comumente usados, sendo eles, __ init __.py, views.py, models.py, forms.py.

Agora, vamos voltar para nosso arquivo __ init __.py e adicionar o seguinte trecho de código:


 # flask custom commands
 with app.app_context():
     from .settings import create_folder_app
     app.cli.add_command(create_folder_app)

Enter fullscreen mode Exit fullscreen mode

O arquivo __ init __.py completo ficará assim:


# flask imports
from flask import Flask


def create_app():
    '''
        Função para criar um aplicativo Flask
    '''

    # Instanciando a o objeto Flask()
    app = Flask(__name__)

    # flask custom commands
    with app.app_context():
        from .settings import create_folder_app
        app.cli.add_command(create_folder_app)

    # retornando o objeto app
    return app

Enter fullscreen mode Exit fullscreen mode

Agora, vamos exportar nossas variaveis de ambiente, para que a aplicação flask funcione corretamente. Siga os passos:

  • Em seu terminal, dentro da pasta projeto, digite consecutivamente:
export FLASK_APP=project
export FLASK_ENV=Development
export FLASK_DEBUG=True
Enter fullscreen mode Exit fullscreen mode

Feito isso, ja podemos executar o seguinte comando no terminal, para, de fato, utilizarmos nosso comando:

flask startapp projeto/usuarios 
Enter fullscreen mode Exit fullscreen mode

O comando acima irá criar nossa app dentro da pasta projeto.

Após executar o mesmo, a seguinte ordenação de pasta será criada:

pastas2

Pronto, agora ja conseguimos agilizar um de nossos procedimentos diarios no desenvolvimento de uma aplicação flask.

Considerações finais

O intuito desse artigo foi mostrar a liberdade que temos com o flask e o quanto o mesmo é expansível a modo de facilitar a nossa vida no dia a dia.

Top comments (0)