Introdução
Neste laboratório, vamos percorrer a criação de uma aplicação de blog utilizando Flask, um framework web popular em Python. Esta aplicação irá listar todas as publicações do blog, permitir que utilizadores autenticados criem publicações e permitir que os autores editem ou eliminem as suas próprias publicações.
Nota: É necessário criar o ficheiro de código por si mesmo e executá-lo no ambiente. Pode visualizar o estado do serviço Flask em Web 5000.
Definir Blueprint (Blueprint)
Primeiramente, vamos definir um blueprint para o nosso blog. Um blueprint é uma forma de organizar um grupo de views (vistas) relacionadas e outro código.
## flaskr/blog.py
from flask import Blueprint, flash, g, redirect, render_template, request, url_for
from werkzeug.exceptions import abort
from flaskr.auth import login_required
from flaskr.db import get_db
## The Blueprint is named 'blog'. It's defined in the same file.
## The blueprint needs to know where it's defined, so __name__ is passed as the second argument.
bp = Blueprint('blog', __name__)
Registrar Blueprint (Blueprint)
Em seguida, vamos registrar o blueprint com a nossa aplicação.
## flaskr/__init__.py
def create_app():
app = ...
## existing code omitted
## import and register the blueprint from the factory using app.register_blueprint()
from . import blog
app.register_blueprint(blog.bp)
app.add_url_rule('/', endpoint='index')
return app
Criar Índice do Blog
Agora, vamos criar uma view de índice para exibir todas as postagens do blog. Usaremos um JOIN SQL para incluir informações do autor da tabela user em nossos resultados.
## flaskr/blog.py
@bp.route('/')
def index():
db = get_db()
posts = db.execute(
'SELECT p.id, title, body, created, author_id, username'
' FROM post p JOIN user u ON p.author_id = u.id'
' ORDER BY created DESC'
).fetchall()
return render_template('blog/index.html', posts=posts)
Criação de Postagens
Em seguida, criaremos uma view que permite que usuários logados criem novas postagens no blog.
## flaskr/blog.py
@bp.route('/create', methods=('GET', 'POST'))
@login_required
def create():
if request.method == 'POST':
title = request.form['title']
body = request.form['body']
error = None
if not title:
error = 'Title is required.'
if error is not None:
flash(error)
else:
db = get_db()
db.execute(
'INSERT INTO post (title, body, author_id)'
' VALUES (?, ?, ?)',
(title, body, g.user['id'])
)
db.commit()
return redirect(url_for('blog.index'))
return render_template('blog/create.html')
Atualização de Postagens
Adicionaremos a capacidade para que os autores atualizem suas próprias postagens. Para evitar a duplicação de código, criaremos uma função auxiliar para obter uma postagem e verificar se o usuário atual é o autor.
## flaskr/blog.py
@bp.route('/<int:id>/update', methods=('GET', 'POST'))
@login_required
def update(id):
post = get_post(id)
if request.method == 'POST':
title = request.form['title']
body = request.form['body']
error = None
if not title:
error = 'Title is required.'
if error is not None:
flash(error)
else:
db = get_db()
db.execute(
'UPDATE post SET title = ?, body = ?'
' WHERE id = ?',
(title, body, id)
)
db.commit()
return redirect(url_for('blog.index'))
return render_template('blog/update.html', post=post)
Exclusão de Postagens
Finalmente, adicionaremos a capacidade para que os autores excluam suas próprias postagens.
## flaskr/blog.py
@bp.route('/<int:id>/delete', methods=('POST',))
@login_required
def delete(id):
get_post(id)
db = get_db()
db.execute('DELETE FROM post WHERE id = ?', (id,))
db.commit()
return redirect(url_for('blog.index'))
Resumo
Parabéns, você criou uma aplicação de blog simples usando Flask! Esta aplicação suporta autenticação de usuário e permite que os usuários criem, editem e excluam suas próprias postagens no blog.