Flask Blog-Applikation

FlaskFlaskBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir schrittweise eine Blog-Applikation erstellen, die auf Flask, einem beliebten Webframework in Python, basiert. Diese Applikation wird alle Blogbeiträge auflisten, angemeldete Benutzer ermöglichen, Beiträge zu erstellen, und Autoren ihre eigenen Beiträge zu bearbeiten oder zu löschen.

Hinweis: Sie müssen die Code-Datei selbst erstellen und sie in der Umgebung ausführen. Sie können den Status des Flask-Diensts auf Web 5000 voranschauen.


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{{"Flask Blog-Applikation"}} flask/response_objects -.-> lab-136340{{"Flask Blog-Applikation"}} flask/application_object -.-> lab-136340{{"Flask Blog-Applikation"}} flask/sessions -.-> lab-136340{{"Flask Blog-Applikation"}} flask/session_interface -.-> lab-136340{{"Flask Blog-Applikation"}} flask/class_based_views -.-> lab-136340{{"Flask Blog-Applikation"}} flask/useful_internals -.-> lab-136340{{"Flask Blog-Applikation"}} flask/blueprint_objects -.-> lab-136340{{"Flask Blog-Applikation"}} flask/command_line_interface -.-> lab-136340{{"Flask Blog-Applikation"}} end

Definiere das Blueprint

Zunächst werden wir ein Blueprint für unseren Blog definieren. Ein Blueprint ist eine Möglichkeit, eine Gruppe von zusammenhängenden Ansichten und anderen Code zu organisieren.

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

## Das Blueprint heißt 'blog'. Es wird in der gleichen Datei definiert.
## Das Blueprint muss wissen, wo es definiert ist, daher wird __name__ als zweiter Argument übergeben.
bp = Blueprint('blog', __name__)

Registriere das Blueprint

Als nächstes registrieren wir das Blueprint in unserer Anwendung.

## flaskr/__init__.py

def create_app():
    app =...
    ## vorhandener Code weggelassen

    ## importiere und registriere das Blueprint aus der Factory mit app.register_blueprint()
    from. import blog
    app.register_blueprint(blog.bp)
    app.add_url_rule('/', endpoint='index')

    return app

Erstelle den Blog-Index

Lassen Sie uns jetzt eine Index-Ansicht erstellen, um alle Blogbeiträge anzuzeigen. Wir werden eine SQL JOIN verwenden, um die Autorinformationen aus der user-Tabelle in unseren Ergebnissen zu enthalten.

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

Beitragserstellung

Als nächstes erstellen wir eine Ansicht, die angemeldeten Benutzern ermöglicht, neue Blogbeiträge zu erstellen.

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

Beitragsaktualisierung

Wir werden den Autoren die Möglichkeit geben, ihre eigenen Beiträge zu aktualisieren. Um den Code nicht zu duplizieren, erstellen wir eine Hilfsfunktion, um einen Beitrag zu erhalten und zu überprüfen, ob der aktuelle Benutzer der Autor ist.

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

Beitraglöschung

Schließlich werden wir den Autoren die Möglichkeit geben, ihre eigenen Beiträge zu löschen.

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

Zusammenfassung

Herzlichen Glückwunsch, Sie haben eine einfache Blog-Applikation mit Flask erstellt! Diese Applikation unterstützt die Benutzerauthentifizierung und ermöglicht es Benutzern, eigene Blogbeiträge zu erstellen, zu bearbeiten und zu löschen.