Erstellen Sie eine Anwendung, die Formulare mithilfe von Python / Flask anstelle von DB eingibt, anzeigt und löscht.

Einführung

Hallo. Dies ist ein Eintrag für die Kategorie Python des Adventskalenders 2019.

Er begann Ende 2018 Python als Hobby zu schreiben, ist eine Person aus einer anderen Branche und hat keine praktische Erfahrung. Heute habe ich versucht, ein Modell und eine Ansicht mit Flask zu schreiben, und ich hatte große Probleme, deshalb würde ich es gerne schreiben. Insbesondere war das Löschen äußerst schwierig. Es mag viele seltsame Dinge geben, aber es hat vorerst funktioniert. Es ist für Anfänger.

App abgeschlossen

スクリーンショット 2019-12-08 16.15.32.png

Abschlusscode

app.py


from flask import Flask,render_template,request,redirect
app = Flask(__name__)

class DatabaseInit():
    db = []
    def __init__(self):
        pass

class DatabaseManager(DatabaseInit):
    def db_append(self,add_value):
        self.db.append(add_value)
    def db_get(self):
        return self.db
    def db_delete(self,value):
        self.db.pop(value)

@app.route('/', methods=['POST','GET'])
def index():
    if request.method == 'GET':
        db = DatabaseInit()
        return render_template('index.html')
    if request.method == 'POST':
        db_manage = DatabaseManager()
        num = request.form.get('comment')
        if num == None:
            view_lists = db_manage.db_get()
        else:
            db_manage.db_append(num)
            view_lists = db_manage.db_get()
        return render_template('index.html', show_lists = view_lists)

@app.route('/delete', methods=['POST'])
def delete():
    db_manage = DatabaseManager()
    id = int(request.form['delete_id'])
    db_manage.db_delete(id)
    return redirect('/',code=307)

if __name__ == '__main__':
    app.run(host='127.0.0.1',port='5000',debug=True)

index.html


<html>
    <head>
        <title>Flask</title>
    </head>
    <body>
        <h1>Flasche WEB App</h1>
        <h2>Kommentar Registrierung</h2>
        <form action="/" name="comment" method="POST">
            <input type="text" name="comment">
            <input type="submit" name="submit_comment">
        </form>
        <h2>Kommentaranzeige</h2>
        {% for show_list in show_lists %}
        {{ show_list }}
        <form method="POST" name="delete" action="/delete">
            <input type="hidden" name="delete_id" value="{{ show_lists.index(show_list) }}">
            <input type="submit" name="delete_id" value="Löschen">
        </form>
    </br>
        {% endfor %}
    </body>
</html>

Dinge, an die ich vor dem Schreiben gedacht habe

Umgebung

Implementierung

Virtuelle Umgebung

python -m venv venv

Starten Sie venv

source venv/bin/activate

Installieren Sie den Kolben

pip install flask

Erstelle Datei

touch app.py

Erstellen Sie eine Vorlage

Flask muss HTML in den Vorlagenordner legen.

mkdir templates
cd templates
touch index.html

Verfassung

/ Arbeitsordner ┝app.py ┗/templates  ┗index.html HelloWorld

app.py


from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

if __name__ == '__main__':
    app.run()
python app.py

スクリーンショット 2019-12-08 14.15.37.png

Stellen Sie den Debug-Modus, den Host und den Port ein

Wenn Sie den Debug-Modus auf True setzen, wird dies nur durch Aktualisieren des Browsers wiedergegeben, sodass dies einfach ist. Wenn Sie @ app.route ('/') festlegen, wird dies als GET behandelt. Mit anderen Worten, es ist der Bildschirm, der angezeigt wird, wenn Sie auf die Stamm-URL zugreifen.

app.py


from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

if __name__ == '__main__':
    app.run(host='127.0.0.1',port='5000',debug=True)

HTML rendern

Importieren Sie render_template.

index.html


<html>
    <head>
        <title>Flask</title>
    </head>
    <body>
        <h1>Hello World</h1>
        <p>Das ist HTML.</p>
    </body>
</html>

app.py


from flask import Flask,render_template
app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host='127.0.0.1', port='5000', debug=True)

スクリーンショット 2019-12-08 14.26.43.png

Bildschirm mit HTML erstellen

action = '/' bedeutet, Daten an '/' zu senden. Wenn Sie beispielsweise zu einer anderen Seite wechseln möchten, schreiben Sie '/ etwas', und die Daten werden an diese URL gesendet. Da dies eine einzelne Seite ist, senden wir die Daten an das aktuelle '/'. method = "POST" sendet die Daten per POST. Das Bild ist, dass GET Daten an eine URL veröffentlicht und Daten sendet und POST Daten verbirgt und Daten sendet. Dieses Mal zeigen wir die Seite an, die zum Zeitpunkt von GET initialisiert wurde, und die Seite, auf der die im Formular gesendeten Daten im Fall von POST aktualisiert wurden. name = 'comment' ist erforderlich, um die Daten in app.py zu erhalten. Sie können eine beliebige Zeichenfolge verwenden.

index.html


<html>
    <head>
        <title>Flask</title>
    </head>
    <body>
        <h1>Flasche WEB App</h1>
        <h2>Kommentar Registrierung</h2>
        <form action="/" name="comment" method="POST">
            <input type="text" name="comment">
            <input type="submit" name="submit_comment">
        </form>
        <h2>Kommentaranzeige</h2>
    </body>
</html>

スクリーンショット 2019-12-08 14.37.23.png

Übergeben Sie die Daten an HTML und zeigen Sie sie an

Flask verwendet eine Template-Engine namens jinja2. Schreiben Sie auf der Python-Seite den Variablennamen auf der HTML-Seite = den Variablennamen auf der Python-Seite in das Argument der Funktion render_template (). Auf der HTML-Seite kann es durch Eingabe von {{Variablenname auf der HTML-Seite}} angezeigt werden.

app.py


from flask import Flask,render_template
app = Flask(__name__)


@app.route('/')
def index():
    show_py = 'Ich komme aus Python'
    return render_template('index.html',show_html = show_py)

if __name__ == '__main__':
    app.run(host='127.0.0.1', port='5000', debug=True)

index.html


<html>

<head>
    <title>Flask</title>
</head>

<body>
    <h1>Flasche WEB App</h1>
    <h2>Kommentar Registrierung</h2>
    <form action="/" name="comment" method="POST">
        <input type="text" name="comment">
        <input type="submit" name="submit_comment">
    </form>
    <h2>Kommentaranzeige</h2>
    {{ show_html }}
</body>

</html>

スクリーンショット 2019-12-08 14.57.20.png

Erstellen Sie eine Datenbank (diesmal ein Array) und ein Modell

Dieses Mal werde ich die Datenbank als Array erstellen. Initialisieren Sie das Array mit DatabaseInit. Erstellen Sie eine Methode in DatabaseManager und verwenden Sie diese Methode, um die Datenbank zu betreiben. Dieses Mal habe ich drei Funktionen erstellt: Element hinzufügen, Element abrufen und Element löschen. Ich habe diesmal ein Array verwendet, aber ich denke, die Idee ist dieselbe, solange sie in SQL oder DB umgeschrieben wird.

Wenn Sie nichts schreiben möchten, aber etwas schreiben müssen, schreiben Sie pass. Es geht darum, nichts zu tun. Die Instanz ist sich selbst zugeordnet. In Python ist das erste Argument jeder Methode immer self. def __ init __ (self): wird ausgeführt, wenn es instanziiert wird. Klasse DatabaseManager (DatabaseInit) ist eine Vererbung. Vererbung auf Zugriffsliste db.

app.py


class DatabaseInit():
    db = []
    def __init__(self):
        pass

class DatabaseManager(DatabaseInit):
    def db_append(self,add_value):
        self.db.append(add_value)
    def db_get(self):
        return self.db
    def db_delete(self,value):
        self.db.pop(value)

Erstellen Sie Routing und Verarbeitung

Setzen Sie method = ['GET', 'POST'], damit sowohl GET als auch POST darauf zugreifen können. GET ist der Bildschirm, den Sie sehen, wenn Sie zum ersten Mal darauf zugreifen, und POST ist der Bildschirm, den Sie sehen, wenn die Daten gesendet werden. Verarbeiten Sie es mit einer if-Anweisung. Richter mit request.method ==. Instanziieren Sie die DatabaseInit-Klasse mit db = DatabaseInit (). Mit anderen Worten, dieses Mal erstellen wir ein leeres Array namens db. Der POST-Prozess hat auch eine verschachtelte if-Anweisung. Dies dient dazu, den Vorgang des Sendens einer Zeichenfolge im HTML-Formular vom Vorgang des Löschens zu trennen. num = request.form.get ('comment') wird zugewiesen, wenn Sie die Zeichenfolge im HTML-Formular senden. Es gibt if num == None:, was bedeutet, dass das Senden beim Löschen zu diesem Vorgang führt. Wenn die Zeichenfolge gesendet wird, sonst: Folgendes wird verarbeitet. In db_manage.db_append (num) wird die der Variablen num zugewiesene Zeichenfolge zum Array hinzugefügt. Ich erhalte das Array mit db_manage.db_get ().

app.py


from flask import Flask,render_template,request,redirect
app = Flask(__name__)

@app.route('/', methods=['POST','GET'])
def index():
    if request.method == 'GET':
        db = DatabaseInit()
        return render_template('index.html')
    if request.method == 'POST':
        db_manage = DatabaseManager()
        num = request.form.get('comment')
        if num == None:
            view_lists = db_manage.db_get()
        else:
            db_manage.db_append(num)
            view_lists = db_manage.db_get()
        return render_template('index.html', show_lists = view_lists)

Show_Lists in HTML anzeigen

In jinja2 können Sie Python-Code einbetten, indem Sie ihn in {%%} einschließen. Ich möchte die Liste einzeln ausgeben, also den Vorgang, den Sie wiederholen möchten, mit {% für xx in xxx%} ~ {% endfor%} einschließen. If wird als {% if expression%} ~ {% endif%} geschrieben.

index.html


<html>
    <head>
        <title>Flask</title>
    </head>
    <body>
        <h1>Flasche WEB App</h1>
        <h2>Kommentar Registrierung</h2>
        <form action="/" name="comment" method="POST">
            <input type="text" name="comment">
            <input type="submit" name="submit_comment">
        </form>
        <h2>Kommentaranzeige</h2>
        {% for show_list in show_lists %}
        {{ show_list }}
        <form method="POST" name="delete" action="/delete">
            <input type="hidden" name="delete_id" value="{{ show_lists.index(show_list) }}">
            <input type="submit" name="delete_id" value="Löschen">
        </form>
    </br>
        {% endfor %}
    </body>
</html>

Der süchtig machende Teil war der Löschteil. Bei einem normalen Formular können nur POST und GET gesendet werden. Verwenden Sie daher type = "hidden" und senden Sie name = "delete_id" und value = "{{show_lists.index (show_list)}}" in der Post .. Es wird nicht auf dem Bildschirm angezeigt. Da die Erkennung der Form etwas schwach ist, kann es Stellen geben, an denen es nicht erforderlich ist, den Namen zu beschreiben. .. Lass es mich wissen, bitte. ..

Route / Löschen

Wenn die Schaltfläche Löschen gedrückt wird, erhält post den Indexwert des zu löschenden Arrays, und die Methode db_delete () löscht das Element aus dem Array. Da die von request.form erfassten Daten eine Zeichenfolge sind, wird die Typkonvertierung mit int () durchgeführt. redirect () bedeutet, dass die Seite verschoben werden muss. Mit render_template () wird eine Seite unter der aktuellen URL erstellt, sodass eine seltsame URL wie local / delete / index.html zu einem Fehler führt. '/' leitet Sie zur Funktion def index (): weiter. code = 307 bedeutet, mit POST umzuleiten. Die Umleitung sendet Daten per GET. Wenn Sie also den Code auf 307 setzen, wird der POST beibehalten.

app.py


@app.route('/delete', methods=['POST'])
def delete():
    db_manage = DatabaseManager()
    id = int(request.form['delete_id'])
    db_manage.db_delete(id)
    return redirect('/',code=307)

das ist alles

Zum ersten Mal habe ich etwas technisch richtig über Qiita geschrieben, daher denke ich, dass es viele Teile gibt, die nicht vollständig erklärt werden, aber ich hoffe, dass es jemandem hilft. Wenn Sie Fehler finden, lassen Sie es uns bitte wissen und wir werden sie korrigieren.

Nächstes Mal möchte ich versuchen, DB zu verwenden!

Recommended Posts

Erstellen Sie eine Anwendung, die Formulare mithilfe von Python / Flask anstelle von DB eingibt, anzeigt und löscht.
Eine Python-Client-App, die Dateien aus S3 herunterlädt und löscht, indem ein Bucket angegeben wird
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht
Erstellen Sie mit pyenv unter Ubuntu 12.04 schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen
[Python] Erstellen Sie schnell eine API mit Flask
Erstellen Sie mit venv unter Ubuntu 14.04 LTS schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen
Erstellen Sie eine Web-App, die PDF mit Flask und PyPDF2 in Text konvertiert
Erstellen Sie eine App, die Schüler mit Python errät
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Erstellen Sie eine Webmap mit Python und GDAL
Erstellen Sie einfach eine Python-Konsolenanwendung mit Click
Lassen Sie uns eine App erstellen, die ähnliche Bilder mit Python und Flask Part2 durchsuchen kann
Erstellen Sie einen Discord-Bot, der einseitig mit Python benachrichtigt (nur Anfragen und JSON werden verwendet).
Erstellen Sie mit PyInstaller eine exe-Datei, die in einer Windows-Umgebung ohne Python funktioniert
Bestätigen Sie das Überschreiben der Datei mit der Option, das Dateiobjekt als Argument mit Python argparse zu verwenden
Erstellen Sie mit Python + Flask einen animierten lokalen GIF-Server
Python - Exportieren Sie ein zweidimensionales Histogramm von Matplotlib als Array
Analysieren und visualisieren Sie JSON (Webanwendung ⑤ mit Python + Flask)
Ein Server, der POST-Daten mit flask / python wiedergibt
[Python] Erstellen Sie mit np.arange ein Datumsarray mit beliebigen Inkrementen
Ich möchte eine Karaoke-Klangquelle erstellen, indem ich Instrumente und Gesang mit Python trenne
Erstellen Sie ein zweidimensionales Array, indem Sie am Ende eines leeren Arrays mit numpy eine Zeile hinzufügen
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Erstellen Sie einen QR-Code, der durch Kratzen "Izumi Oishi" anzeigt
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
[Python] Ein Programm, das durch Kombinieren von Ganzzahlen ein zweidimensionales Array erstellt
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
Drehen Sie ein Array von Zeichenfolgen mit einer for-Anweisung (Python3).
[AWS] Flask-Anwendungsbereitstellungsversion, die versucht hat, eine Python-Umgebung mit eb zu erstellen [Elastic Beanstalk]
Beachten Sie, dass ich süchtig danach war, mit Pythons mysql.connector über eine Webanwendung auf die Datenbank zuzugreifen
Ich erhalte einen Betriebssystemfehler: [Errno 8] Fehler beim Ausführen des Formats, wenn eine Flask-Anwendung mit einem Python-Befehl ausgeführt wird
Erstellen Sie ein Python-Numpy-Array
Webanwendung mit Python + Flask ② ③
Erstellen Sie ein Verzeichnis mit Python
Webanwendung mit Python + Flask ④
[MariaDB] Installieren Sie MariaDB unter Linux und erstellen Sie eine Datenbank und einen Benutzer.
Erstellen Sie mit turicreate eine API, die Daten aus einem Modell zurückgibt
Webanwendung mit Python + Flask (unter Verwendung von VScode) # 1 - Aufbau einer virtuellen Umgebung-
Erstellen Sie eine temporäre Datei mit Django als Zip und geben Sie sie zurück
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Erstellen Sie einen einfachen geplanten Stapel mit Dockers Python Image und parse-crontab
Verwenden Sie sqlalchemy, um die DB-Tabelle zu durchsuchen und eine Datenflamme für Pandas zu erstellen
[Ev3dev] Erstellen Sie ein Programm, das das LCD (Bildschirm) mit Python erfasst
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Ein Python-Skript, das auf dem Mac erstellte ._DS_Store- und ._ * -Dateien löscht
Geben Sie den Bericht mit Python aus DB in PDF aus, hängen Sie ihn automatisch an eine E-Mail an und senden Sie ihn
Erstellen Sie eine Entwicklungsumgebung mit Jupyter und Flask mit Python in Docker (unterstützt sowohl VS Code als auch Code-Server).