Skip to content

Commit efb6ef7

Browse files
committed
Criando a extensao pt 1
1 parent 28fbec0 commit efb6ef7

File tree

1 file changed

+48
-18
lines changed

1 file changed

+48
-18
lines changed

content/what_the_flask_extensoes.md

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
Title: What the Flask? pt-4 e 5 Como Criar Extensões e Plugins para o Flask
1+
Title: What the Flask? pt 4 e 5 Criando Extensões para o Flask
22
Slug: what-the-flask-pt-4-5-como-criar-extensoes-e-plugins-para-flask
3-
Date: 2017-05-01 09:00
3+
Date: 2017-04-24 09:00
44
Tags: flask,web,tutorial,what-the-flask
55
Author: Bruno Cezar Rocha
66
Email: rochacbruno@gmail.com
@@ -31,28 +31,26 @@ What The Flask - 4-5/6
3131
1. [**Hello Flask**](/what-the-flask-pt-1-introducao-ao-desenvolvimento-web-com-python): Introdução ao desenvolvimento web com Flask
3232
2. [**Flask patterns**](/what-the-flask-pt-2-flask-patterns-boas-praticas-na-estrutura-de-aplicacoes-flask): Estruturando aplicações Flask
3333
3. [**Plug & Use**](/what-the-flask-pt-3-plug-use-extensoes-essenciais-para-iniciar-seu-projeto): extensões essenciais para iniciar seu projeto.
34-
4. [**e 5 Criando Extensões e Plugins para o Flask**](what-the-flask-pt-4-5-como-criar-extensoes-e-plugins-para-flask)(**<-- Você está aqui**)
34+
4. [**e 5 Criando Extensões para o Flask**](what-the-flask-pt-4-5-como-criar-extensoes-e-plugins-para-flask)(**<-- Você está aqui**)
3535
6. **Run Flask Run**: "deploiando" seu app nos principais web servers e na nuvem.
3636

3737

3838
Não sei se você ainda se lembra? mas estavámos desenvolvendo um [CMS de notícias](http://github.com/rochacbruno/wtf),
39-
utilizamos MongoDB, Flask-Security, Flask-Admin e Bootstrap.
40-
41-
Agora vamos nos aprofundar um pouco mais nos detalhes do `Blueprint` e então
42-
criar passo a passo uma extensão (ou se preferir pode chamar de plugin) para o
43-
Flask.
39+
utilizamos MongoDB, Flask-Security, Flask-Admin e Bootstrap, neste artigo
40+
iremos adicionar mais uma extensão em nosso CMS, mas iremos criar a extensão
41+
ao invés de usar uma das extensões disponiveis.
4442

4543
> **Extensão ou Plugin?** Por [definição](https://pt.wikipedia.org/wiki/Plug-in)
46-
`plugin` é a palavra usada para descrever um aplicativo totalmente externo e
47-
desacoplado da lógica do framework, enquanto `extensão` é o termo usado para
44+
**plugin** é a palavra usada para descrever um aplicativo totalmente externo e
45+
desacoplado da lógica do framework. Enquanto **extensão** é o termo usado para
4846
descrever um módulo que utiliza as mesmas estruturas do framework e que pode opcionalmente ser ativado.
49-
No Flask sempre será mais comum usarmos apenas a palavra `Extension` pois
50-
conforme já mencionado aqui nesta série, o `flask` encoraja a sobrecarga de
47+
No Flask sempre será mais comum usarmos apenas a palavra **Extension** pois
48+
conforme já mencionado aqui nesta série, o **flask** encoraja a sobrecarga de
5149
seus métodos internos fazendo com que a maioria das extensões injetem
52-
funcionalidades diretamente ou até mesmo alterem o `core` do framework
50+
funcionalidades diretamente ou até mesmo alterem o **core** do framework
5351
e por isso o termo extensão é mais utilizado pela comunidade.
54-
Podemos usar a palavra `plugin` para descrever módulos que sejam escritos para adicionar funcionalidades não ao flask mas sim a camadas de mais alto nível da aplicação e que não seja de uso geral. `Extension` é um módulo que pode ser
55-
reaproveitado por qualquer aplicativo escrito em `flask` enquanto `plugin` é
52+
Podemos usar a palavra **plugin** para descrever módulos que sejam escritos para adicionar funcionalidades não ao flask mas sim a camadas de mais alto nível da aplicação e que não seja de uso geral. **Extension** é um módulo que pode ser
53+
reaproveitado por qualquer aplicativo escrito em **flask** enquanto **plugin** é
5654
um módulo escrito especificamente para a sua aplicação.
5755

5856
# Quando criar uma extensão?
@@ -157,20 +155,23 @@ Só para exemplificar veja o seguinte exemplo:
157155

158156
```python
159157
app = Flask(__name__) # criamos a instancia de app
158+
admin = Admin() # instancia do Flask-Admin ainda não inicializada
160159

161160
do_something(app) # injeta ou altera funcionalidades do app
162-
do_another_thing(app) # injeta ou altera funcionalidades do app
161+
do_another_thing(app, admin) # injeta ou altera funcionalidades do app ou do admin
163162
Security(app) # adiciona funcionalidades de login e controle de acesso
164163
Cache(app) # adiciona cache para views e templates
165164
Sitemap(app) # A extensão que iremos criar! adiciona o /sitemap.xml no app
165+
166+
admin.init_app(app) # agora sim inicializamos o flask-admin no modo lazy
166167
```
167168

168169
Olhando o código acima pode parecer bastante simples, você pode achar que basta
169170
receber a intância de `app` e sair alterando sem seguir nenhum padrão.
170171

171172
```python
172173
def do_something(app):
173-
"Mal exemplo de factory injeta ou altera funcionalidades do app"
174+
"Mal exemplo de factory que injeta ou altera funcionalidades do app"
174175
# adiciona rotas
175176
@app.route('/qualquercoisa)
176177
def qualquercoisa():
@@ -226,7 +227,36 @@ mas não se preocupe pois usando Blueprint isso já é resolvido automaticamente
226227
# Criando a extensão Simple Sitemap
227228

228229
Ok, agora que você já sabe a teoria vamos para a prática, vamos reescrever o
229-
nosso app do **Exemplo 1** usando uma extensão chamada `flask_simple_sitemap`
230+
nosso app do **Exemplo 1** usando uma extensão chamada `flask_simple_sitemap` e para isso vamos começar criando a extensão:
231+
232+
A extensão será um novo módulo Python que vai ser instalado usando `setup` ou `pip` portanto crie um projeto separado.
233+
234+
```bash
235+
$ cd Projects # pasta onde vc armazena seus projetos
236+
237+
$ mkdir simple_sitemap # o diretório root do projeto
238+
$ cd simple_sitemap
239+
$ touch setup.py # precisaremos instalar a extensão
240+
$ mkdir templates # usaremos Jinja para gerar o XML
241+
$ touch sitemap.xml # O template Jinja
242+
$ echo 'include templates/sitemap.xml' > MANIFEST.in # incluindo templates no build manifest do setuptools
243+
$ echo '# Prometo documentar essa extensão!' > README.md # é sempre bom incluir uma documentação básica
244+
$ touch tests.py # se não tiver testes não serve para nada! :)
245+
$ touch simple_sitemap.py # A Extensão será escrita neste arquivo
246+
```
247+
248+
Agora voce terá a seguinte estrutura:
249+
250+
```bash
251+
simple_sitemap/
252+
|__ templates/
253+
| |__ sitemap.xml
254+
|__ simple_sitemap.py
255+
|__ tests.py
256+
|__ setup.py
257+
|__ MANIFEST.in
258+
|__ README.md
259+
```
230260

231261

232262

0 commit comments

Comments
 (0)