Aplicación de blog con Flask

FlaskFlaskBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, repasaremos la creación de una aplicación de blog utilizando Flask, un popular marco web en Python. Esta aplicación listará todas las publicaciones del blog, permitirá a los usuarios autenticados crear publicaciones y permitirá a los autores editar o eliminar sus propias publicaciones.

Nota: Debes crear el archivo de código por ti mismo y ejecutarlo en el entorno. Puedes previsualizar el estado del servicio Flask en Web 5000.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL flask(("Flask")) -.-> flask/DevelopmentToolsGroup(["Development Tools"]) flask(("Flask")) -.-> flask/DataHandlingGroup(["Data Handling"]) flask(("Flask")) -.-> flask/CoreConceptsGroup(["Core Concepts"]) flask/DataHandlingGroup -.-> flask/incoming_request_data("Incoming Request Data") flask/DataHandlingGroup -.-> flask/response_objects("Response Objects") flask/CoreConceptsGroup -.-> flask/application_object("Application Object") flask/CoreConceptsGroup -.-> flask/sessions("Sessions") flask/CoreConceptsGroup -.-> flask/session_interface("Session Interface") flask/CoreConceptsGroup -.-> flask/class_based_views("Class-Based Views") flask/CoreConceptsGroup -.-> flask/useful_internals("Useful Internals") flask/DevelopmentToolsGroup -.-> flask/blueprint_objects("Blueprint Objects") flask/DevelopmentToolsGroup -.-> flask/command_line_interface("Command Line Interface") subgraph Lab Skills flask/incoming_request_data -.-> lab-136340{{"Aplicación de blog con Flask"}} flask/response_objects -.-> lab-136340{{"Aplicación de blog con Flask"}} flask/application_object -.-> lab-136340{{"Aplicación de blog con Flask"}} flask/sessions -.-> lab-136340{{"Aplicación de blog con Flask"}} flask/session_interface -.-> lab-136340{{"Aplicación de blog con Flask"}} flask/class_based_views -.-> lab-136340{{"Aplicación de blog con Flask"}} flask/useful_internals -.-> lab-136340{{"Aplicación de blog con Flask"}} flask/blueprint_objects -.-> lab-136340{{"Aplicación de blog con Flask"}} flask/command_line_interface -.-> lab-136340{{"Aplicación de blog con Flask"}} end

Definir el Blueprint

En primer lugar, definiremos un blueprint para nuestro blog. Un blueprint es una forma de organizar un grupo de vistas relacionadas y otros códigos.

## 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

## El Blueprint se llama 'blog'. Está definido en el mismo archivo.
## El blueprint necesita saber dónde está definido, por lo que __name__ se pasa como segundo argumento.
bp = Blueprint('blog', __name__)

Registrar el Blueprint

A continuación, registraremos el blueprint con nuestra aplicación.

## flaskr/__init__.py

def create_app():
    app =...
    ## código existente omitido

    ## importa y registra el blueprint desde la fábrica usando app.register_blueprint()
    from. import blog
    app.register_blueprint(blog.bp)
    app.add_url_rule('/', endpoint='index')

    return app

Crear el índice del blog

Ahora, creemos una vista de índice para mostrar todas las publicaciones del blog. Usaremos un JOIN SQL para incluir la información del autor de la tabla user en nuestros 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)

Creación de publicaciones

A continuación, crearemos una vista que permita a los usuarios autenticados crear nuevas publicaciones de 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')

Actualización de publicaciones

Agregaremos la capacidad para que los autores actualicen sus propias publicaciones. Para evitar duplicar código, crearemos una función auxiliar para obtener una publicación y comprobar si el usuario actual es el 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)

Eliminación de publicaciones

Por último, agregaremos la capacidad para que los autores eliminen sus propias publicaciones.

## 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'))

Resumen

Felicitaciones, ¡has creado una aplicación de blog simple utilizando Flask! Esta aplicación admite la autenticación de usuarios y permite a los usuarios crear, editar y eliminar sus propias publicaciones de blog.