[PYTHON] Erstellen Sie ein Bulletin Board mit Heroku, Flask, SQL Alchemy

Einführung

Dieses Mal wird die Erstellung des Bulletin Boards beschrieben, indem es in die folgenden sechs Kategorien eingeteilt wird. (1) Umweltbau (2) Bulletin Board mit CSV (3) Bulletin Board mit SQL und SQL Alchemy (4) Bulletin Board mit PostgreSQL und SQL Alchemy (5) Datenmanipulation mit SQLAlchemy (6) Datenmanipulation mit Postgresql

(1) Umweltbau

Erstellen Sie einen Verzeichnis-Test auf Ihrem Desktop. Erstellen Sie im Test eine virtuelle Umgebung und starten Sie sie.

python3 -m venv .
source bin/activate

Installieren Sie das erforderliche Framework und den Webserver.

pip install flask
pip install gunicorn

(2) Bulletin Board mit CSV

Erstellen Sie zunächst ein Bulletin Board mit csv in der lokalen Umgebung.

① Verzeichnisstruktur

test
├app.py
├articles.csv
├Procfile
├requirements.txt
└templates
  ├index.html
  ├layout.html
  └index_result.html

② CSV-Daten vorbereiten

Erstellen Sie articles.csv und geben Sie die folgenden Daten aus Sicht der Verständlichkeit im Voraus ein.

Marmor,Schläfrig
Weiß,Ich bin hungrig
Schwarz,Irgendwie warm
Marmor,Poe Poe Poe
Pontan,Kein Klopapier
Naochin,Kette

③ Erstellen Sie die Haupt-App.py

.py:app.py


#coding: utf-8
from flask import Flask,request,render_template
app = Flask(__name__)

@app.route('/')
def bbs():
    lines = []
    #mit Öffnen, um die CSV-Datei zu lesen
    with open('articles.csv',encoding='utf-8') as f:
        lines = f.readlines() #readlines gibt den Inhalt von csv im Listenformat zurück
    #index.Kehren Sie zu HTML zurück
    return render_template('index.html',lines=lines)

#Post-Methode erhalten
@app.route('/result',methods=['POST'])
def result():
    #Holen Sie sich den Wert des Artikels und des Namens auf Anfrage
    article = request.form['article']
    name = request.form['name']
    #Schreiben Sie im Überschreibmodus in eine CSV-Datei
    with open('articles.csv','a',encoding='utf-8') as f:
        f.write(name + ',' + article + '\n')
    #index_result.Kehren Sie zu HTML zurück
    return render_template('index_result.html',article=article,name=name)


if __name__ == '__main__':
    app.run(debug=False)

④ Bulletin Board und andere Vorlagen

.html:index.html


{% extends 'layout.html' %}
{% block content %}
    <h1>Nyanko Bulletin Board</h1>
    <form action='/result' method='post'>
        <label for='name'>Nyankos Name</label>
        <input type='text' name='name'>
        <p></p>
        <label for='article'>Post</label>
        <input type='text' name='article'>

        <button type='subimit'>Schreiben</button>
    </form>

    <p></p>
    <p></p>

    <table border=1>
        <tr><th>Nyankos Name</th><th>Geposteter Inhalt</th></tr>
        {% for line in lines: %}
        <!--Setzen Sie eine Variable namens column (set ist für jinja2 variable set erforderlich)-->
        <!--Split verwenden,Klassifizieren nach. split gibt eine Liste zurück-->
            {% set column = line.rstrip().split(',') %}
            <tr><td>{{column[0]}}</td><td>{{column[1]}}</td></tr>
        {% endfor %}
    </table>

{% endblock %}

.html:layout.html


<!DOCTYPE html>
<html lang='ja'>
  <head>
      <meta charset='utf-8'>
      <title>Nyanko BBS</title>
      <style>body{padding:10px;}</style>
  </head>
  <body>
    {% block content %}
    {% endblock %}
  </body>
</html>

index_result.html


{% extends 'layout.html' %}
{% block content %}
    <h1>Nya-Ich schrieb an die Pinnwand</h1>
    <p>{{name}}{{article}}</p>

    <!--informieren/Zurück zu-->
    <form action='/' method='get'>
      <button type='submit'>Rückkehr</button>
    </form>

{% endblock %}

⑤ In Heroku bereitstellen

Stellen Sie nach dem Testen in der lokalen Umgebung eine Bereitstellung für Heroku bereit. Die Details der Bereitstellung in Heroku sind wie im folgenden Artikel beschrieben, daher werde ich nur das Wesentliche verwenden und die ausführliche Erklärung weglassen. Hochladen mit Heroku, Flask, Python, Git (Teil 2) Hochladen mit Heroku, Flask, Python, Git (3) Melden Sie sich bei Heroku an und erstellen Sie eine App auf Heroku

heroku login

Der App-Name lautet cat-bbs.

Heroku create cat-bbs

Initialisieren Sie die Verzeichnis-App.

git init

Heroku mit der lokalen Umgebung verbinden,

heroku git:remote -a cat-bbs

Erstellen Sie die Anforderung.txt in der Verzeichnis-App

pip freeze > requirements.txt

Erstellen Sie eine Procfile in der Verzeichnis-App und geben Sie Folgendes ein. Zu diesem Zeitpunkt ist vor g ein Leerzeichen erforderlich, und die App vor: app bedeutet App in app.py. Seien Sie also vorsichtig (form: app for form.py).

web: gunicorn app:app --log-file -

Alles hinzufügen,

git add .

Dieses Mal mit dem Namen the-first festschreiben,

git commit -m'the-first'

Schieben Sie zu Heroku.

git push heroku master

Schließlich,

heroku open

Als ich den Befehl zum Öffnen von Heroku eingab, wurde der Browser gestartet und Folgendes wurde angezeigt. スクリーンショット 2020-03-10 23.16.27.png Wenn Sie den Namen Nyanko als "Iwashi" und den Inhalt des Beitrags als "Ich liebe Fisch" posten, スクリーンショット 2020-03-10 23.16.54.png Es wurde ordnungsgemäß am Schwarzen Brett veröffentlicht. In Heroku verschwindet die geschriebene CSV nach einer bestimmten Zeit (30 Minuten), sodass wir mit dem Einbetten der Datenbank beginnen.

(3) Bulletin Board mit SQL und SQL Alchemy

① Verzeichnisstruktur usw.

test
├app.py
├articles.csv
├Procfile
├requirements.txt
├assets
│ ├init.py   
│ ├database.py
│ └models.py
│
└templates
  ├index.html
  ├layout.html
  └index_result.html

SQLAlchemy ist eines der beliebtesten ORMs in Python. Überprüfen Sie zunächst die Version von sqlite3 (Mac) und installieren Sie sqlalchemy.

sqlite3 --version
pip install sqlalchemy

Erstellen Sie in app.py außerdem init.py im Assets-Ordner als Datei, die zum Lesen von database.py und models.py als Module erforderlich ist (beachten Sie, dass ein Unterstrich hinzugefügt wird).

touch __init__.py

② Grundeinstellung von SQL Alchemy

Erstellen Sie die folgenden zwei Dateien im Assets-Ordner.

database.py ・ ・ ・ Datei, die definiert, welche Datenbank verwendet werden soll, z. B. SQLite und MySQL models.py ・ ・ ・ Eine Datei, die definiert, welche Art von Informationen in die Datenbank gestellt werden Erstens lautet database.py wie folgt.

.py:database.py


#coding: utf-8

#database.py/Datei, die die anfänglichen Einstellungen der zu verwendenden Datenbank verarbeitet, z. B. SQLite
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session,sessionmaker
from sqlalchemy.ext.declarative import declarative_base

import datetime
import os

#data_Benannt db, Datenbank.Wo py ist (os.path.dirname(__file__)), Mit einem absoluten Pfad (os.path.abspath)、data_Speichern Sie db
database_file = os.path.join(os.path.abspath(os.path.dirname(__file__)),'data.db')

#Verwenden der Datenbank sqlite (engin)、database_Daten in Datei gespeichert_Verwenden Sie db und geben Sie sqlite aus, wenn Sie mit echo (echo) arbeiten=True)
engine = create_engine('sqlite:///' + database_file,convert_unicode=True,echo=True)
db_session = scoped_session(
                sessionmaker(
                    autocommit = False,
                    autoflush = False,
                    bind = engine
                )
            )

#declarative_Erstellen Sie eine Instanz von base
Base = declarative_base()
Base.query = db_session.query_property()


#Funktion zum Initialisieren der Datenbank
def init_db():
    #Importieren Sie Modelle in den Assets-Ordner
    import assets.models
    Base.metadata.create_all(bind=engine)

Als nächstes lautet models.py wie folgt. Hier werden das Datum und die Uhrzeit der Veröffentlichung auch am Schwarzen Brett angezeigt.

.py:models.py


#coding: utf-8


from sqlalchemy import Column,Integer,String,Boolean,DateTime,Date,Text
from assets.database import Base
from datetime import datetime as dt

#Informationen zur Datenbanktabelle
class Data(Base):
    #Einstellungen für Tabellennamen,Auf Namen benennen
    __tablename__ = "data"
    #Setzen Sie die Spalteninformationen und setzen Sie sie eindeutig auf False (was bedeutet, dass der gleiche Wert akzeptiert wird).
    #Der Primärschlüssel wird bei der Suche nach einer normalerweise festgelegten Zeile benötigt
    id = Column(Integer,primary_key=True)
    #Name ist das Plakat
    name = Column(Text,unique=False)
   #Artikel ist der gepostete Inhalt
    article = Column(Text,unique=False)
    #Der Zeitstempel ist das Datum und die Uhrzeit der Buchung
   timestamp = Column(DateTime,unique=False)

    #initialisieren
    def __init__(self,name=None,article=None,timestamp=None):
        self.name = name
        self.article = article
        self.timestamp = timestamp

③ Ändern Sie app.py.

Die folgenden beiden sind erforderlich, um die Datenbank zu erstellen oder zu löschen. Importieren Sie sie daher. Importieren Sie die Variable de_session aus dem Datenbankmodul im Assets-Ordner und die Datenklasse aus dem Modellmodul im Assets-Ordner.

from assets.database import db_session
from assets.models import Data

③-1 Schreiben in die Datenbank

Es ist erforderlich, die Werte von Artikel und Name aus index.html abzurufen. Darüber hinaus ist es erforderlich, das Datum und die Uhrzeit (zum Zeitpunkt des Schreibens) zum Zeitpunkt des Erwerbs jedes Werts mit today () zu erfassen und der Variablen today zuzuweisen. Insbesondere ist es wie folgt.


article = request.form['article']
name = request.form['name']
today = datetime.datetime.today()

Die oben genannten Inhalte müssen in einer Zeile gespeichert und mit db_session und de_commit in die Datenbank geschrieben werden. Insbesondere ist es wie folgt.

row = Data(name=name,article=article,timestamp=today)
db_session.add(row)
db_session.commit()

③-2 Lesen aus der Datenbank

Um Daten aus der Datenbank zu lesen, können Sie sie mit db_session.query (Data) .all () abrufen. Wenn Sie beispielsweise Folgendes schreiben, um den Wert in der Datenbank abzurufen,

db_session.query(Data.name,Data.article,Data.timestamp).all()

Ausgabe im Listenformat wie unten gezeigt * (Zum besseren Verständnis wird davon ausgegangen, dass mehrere Beiträge am Schwarzen Brett veröffentlicht und in der Datenbank gespeichert werden.) *

('Mike', 'Heute ist es sonnig', datetime.datetime(2020, 3, 13, 0, 7, 4, 828409)),
 ('Weiß', 'Es regnet morgen', datetime.datetime(2020, 3, 13, 0, 7, 4, 828409)),
 ('Schwarz', 'Warm', datetime.datetime(2020, 3, 13, 0, 7, 4, 828409)),
 ('Pontan', 'Nya Nya Crow ist ein Papierflugzeug', datetime.datetime(2020, 3, 13, 0, 7, 4, 828409)),
 ('Weiß', 'Mein Rücken schmerzt', datetime.datetime(2020, 3, 13, 0, 7, 46, 513144)),
 ('Mike', 'Was ist es?', datetime.datetime(2020, 3, 13, 0, 8, 57, 193710)),
 ('Schwarz', 'Warm', datetime.datetime(2020, 3, 13, 0, 9, 42, 45228)),
 ('Mike', 'Heute bewölkt', datetime.datetime(2020, 3, 13, 0, 17, 13, 709028)),
 ('Boo Taro', 'Heute regnet es den ganzen Tag', datetime.datetime(2020, 3, 14, 13, 26, 29, 438012)),

Es ist erforderlich, den Inhalt der in index.html eingelesenen Datenbank zurückzugeben. Insbesondere ist es wie folgt.

data = db_session.query(Data.name,Data.article,Data.timestamp).all()
return render_template('index.html',data=data)

Das Folgende ist eine Zusammenfassung der Änderungen, die bisher für app.py als Ganzes vorgenommen wurden.

.py:app.py


#coding: utf-8
from flask import Flask,request,render_template
import datetime

#Wird bei Verwendung der Datenbank hinzugefügt
from assets.database import db_session
from assets.models import Data

app = Flask(__name__)


@app.route('/')
def bbs():

    #Aus Datenbank lesen
    data = db_session.query(Data.name,Data.article,Data.timestamp).all()

    #index.Kehren Sie zu HTML zurück
    return render_template('index.html',data=data)


#Post-Methode erhalten
@app.route('/result',methods=['POST'])
def result():
    #Holen Sie sich den Wert des Artikels und des Namens auf Anfrage
    article = request.form['article']
    name = request.form['name']
    #Weisen Sie der Variablen das Datum und die Uhrzeit zu, zu der die Post-Methode von der Today-Funktion empfangen wurde
    today = datetime.datetime.today()

    #index_Schreiben Sie die Informationen aus dem Ergebnis in die Datenbank
    row = Data(name=name,article=article,timestamp=today)
    db_session.add(row)
    db_session.commit()

    #index_result.Kehren Sie zu HTML zurück
    return render_template('index_result.html',article=article,name=name)


if __name__ == '__main__':
    app.run(debug=False)

③-4 (Referenz) Löschen aus der Datenbank

Als Referenz ist das Löschen aus der gelesenen Datenbank wie folgt. Geben Sie das Element an, das Sie aus db_session.query (Data) .all (das erste Element im folgenden Fall) löschen möchten, und verwenden Sie de_session.delete

#coding: utf-8

from assets.database import db_session
from assets.models import Data

def csv_sakujo():
    data = db_session.query(Data).all()
    datum = data[0]
    db_session.delete(datum)
    db_session.commit()

csv_sakujo()

③-5 (Referenz) Schreiben Sie die gelesene Datenbank in csv

Als Referenz lautet die Datei zum Schreiben der gelesenen Datenbank in csv wie folgt.

.p:to_csv.py


#coding: utf-8

from assets.database import db_session
from assets.models import Data

#Daten lesen
def csv_kakikomi():
    data = db_session.query(Data.name,Data.article,Data.timestamp).all()
    print(data)
    #Schreiben Sie im Schreibmodus in eine CSV-Datei#
    with open('articles2.csv','w',encoding='utf-8') as f:
        for i in data:
            f.write(str(i[0])+',')
            f.write(str(i[1])+',')
            f.write(str(i[2])+',' + '\n')

csv_kakikomi()

④ Ändern Sie index_html.py

Zeigen Sie den Wert der von app.py gesendeten Daten an. Von den Datenwerten ist data [2] das aktuelle Datum und die aktuelle Uhrzeit. Da jedoch vor dem Posten ein Wert für None vorhanden ist, wird dieser Wert so festgelegt, dass in der if-Anweisung kein Fehler auftritt. Nach dem Posten wird der Datenzeittyp mit strftime in den str-Typ konvertiert und dann angezeigt.

.html:index.html


{% extends 'layout.html' %}
{% block content %}
    <h1>Nyanko Bulletin Board</h1>
    <form action='/result' method='post'>
        <label for='name'>Nyankos Name</label>
        <input type='text' name='name'>
        <p></p>
        <label for='article'>Post</label>
        <input type='text' name='article'>

        <button type='subimit'>Schreiben</button>
    </form>

    <p></p>
    <p></p>

    <table border=1>
        <tr>
          <th>Nyankos Name</th>
          <th>Geposteter Inhalt</th>
          <th>Datum und Uhrzeit veröffentlichen</th>
        </tr>
        {% for datum in data %}
             <tr>
              <td>{{datum[0]}}</td>
              <td>{{datum[1]}}</td>
              {% if datum[2] == None %}
                  <td>{{datum[2]}}</td>
              {% else %}
                  <td>{{datum[2].strftime('%Y Jahr%m Monat%d Tag/%Uhr%M Minuten%S Sekunden')}}</td>
              {% endif %}
            </tr>
        {% endfor %}
    </table>

{% endblock %}

Versuchen Sie bisher einmal, festzustellen, ob es in der lokalen Umgebung normal funktioniert. スクリーンショット 2020-03-14 22.16.56.png Nachdem Sie bestätigt haben, dass es einwandfrei funktioniert, stellen Sie es auf Heoku bereit und verwenden Sie Herokus PostgreSQL.

(4) Bulletin Board mit PostgreSQL und SQL Alchemy

Stellen Sie es in Heroku bereit und verwenden Sie PostgreSQL.

① Umweltvorbereitung

Installieren Sie postgresql mit Brew.

brew install postgresql

Installieren Sie als Nächstes psycopg2-binary als Treiber für Python, um postgresql zu verwenden. Wenn Sie psycopg2 so installieren, wie es ist, tritt aus irgendeinem Grund ein Fehler auf. Installieren Sie daher psycopg2-binary (Ursache unbekannt).

pip install  psycopg2-binary

Ändern Sie als Nächstes database.py, beschreiben Sie jedoch den Vorgang, bei dem die Umgebungsvariable in Heroku mit dem Namen environ angezeigt und die Datenbank mit dem Namen DATABASE_URL abgerufen wird. Die URL des Verbindungsziels wird in der Umgebung festgelegt. Durch Hinzufügen von oder wird SQLite in der lokalen Umgebung als Datenbank bezeichnet. Wenn Sie mit Heroku verbunden sind, lesen Sie die Postgresql-URL. Wenn Sie nicht verbunden sind, gehen Sie zu SQL. Insbesondere ist es wie folgt.

engine = create_engine(os.environ.get('DATABASE_URL') or 'sqlite:///' + database_file,convert_unicode=True,echo=True)

Die gesamte modifizierte app.py lautet wie folgt

.py:database.py


#coding: utf-8

#database.py/Datei, die die anfänglichen Einstellungen der zu verwendenden Datenbank verarbeitet, z. B. SQLite
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session,sessionmaker
from sqlalchemy.ext.declarative import declarative_base

import datetime
import os

database_file = os.path.join(os.path.abspath(os.path.dirname(__file__)),'data.db')

engine = create_engine(os.environ.get('DATABASE_URL') or 'sqlite:///' + database_file,convert_unicode=True,echo=True)
db_session = scoped_session(
                sessionmaker(
                    autocommit = False,
                    autoflush = False,
                    bind = engine
                )
            )

#declarative_Erstellen Sie eine Instanz von base
Base = declarative_base()
Base.query = db_session.query_property()


#Initialisieren Sie die Datenbank
def init_db():
    #Importieren Sie Modelle in den Assets-Ordner
    import assets.models
    Base.metadata.create_all(bind=engine)

② In Heroku bereitstellen

In Heroku bereitstellen.

heroku login

Heroku mit der lokalen Umgebung verbinden,

heroku git:remote -a cat-bbs

Erstellen Sie die Anforderung.txt erneut in der Verzeichnis-App. (Da psycopg2-binary installiert wurde, muss es erneut erstellt werden.)

pip freeze > requirements.txt

Da das Prockfile bereits erstellt wurde, werde ich es diesmal nicht berühren.

Alles hinzufügen,

git add .

Dieses Mal mit dem Namen the-second festschreiben,

git commit -m'the-second'

Schieben Sie zu Heroku.

git push heroku master

~~ Endlich Heroku offen ~~

Initialisieren Sie die Datenbank, bevor Sie sie in Heroku bereitstellen. Starten Sie Python auf Heroku (Python-Modus).

heroku run python

Initialisieren Sie die Datenbank. Schreiben Sie Folgendes im Python-Modus.

from assets.database import init_db
init_db()

Beenden Sie den Python-Modus, starten Sie Heroku neu und öffnen Sie es.

heroku restart
heroku open

Überprüfen Sie Folgendes im Browser und erfolgreich. スクリーンショット 2020-03-14 22.58.37.png

(5) Datenmanipulation mit SQLAlchemy

Versuchen Sie beispielsweise, das oberste Element in der Datenbank zu löschen ("schwarz"). Starten Sie Herokus Python-Modus.

heroku run python

Schreiben Sie Folgendes im Python-Modus

from assets.database import db_session
from assets.models import Data
data = db_session.query(Data).all()
datum = data[0]
db_session.delete(datum)
db_session.commit()

Wenn Sie Heroku öffnen und mit einem Browser überprüfen, スクリーンショット 2020-03-14 23.05.59.png Das obere "Schwarz" wurde entfernt. (Vergessen Sie nicht, den Python-Modus zu verlassen.)

(6) Datenmanipulation mit Postgresql

Nach der Installation von PostgreSQL können Sie Heroku Postgres mit dem Befehl heroku pg bedienen. Wenn Sie beispielsweise Folgendes eingeben, können Sie den Status des installierten Heroku Postgres wie folgt überprüfen.

heroku pg:info
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           2/20
PG Version:            12.2
Created:               2020-03-14 04:53 UTC
Data Size:             8.2 MB
Tables:                1
Rows:                  3/10000 (In compliance)
Fork/Follow:           Unsupported
Rollback:              Unsupported
Continuous Protection: Off

hobby-Entwicklungsplan(Kostenlose Stufe)Und Status ist verfügbar(Wirksamkeit) 。

Sie können eine Verbindung zu Heroku Postgres herstellen, indem Sie Folgendes eingeben:

heroku pg:psql

Verwenden Sie nach dem Herstellen der Verbindung PostgreSQL-Befehle Versuchen Sie beispielsweise, das oberste Element zu löschen ("test", "poop").

Befehl zur Anzeige der Tabellenliste
\dt;
Befehl zum Auflisten der Daten in der Tabelle
select *aus Daten (Tabellenname);

Folgendes wird ausgegeben.


cat-bbs::DATABASE=> select * from data;
 id |    name    |      article       |         timestamp          
----+------------+--------------------+----------------------------
  3 |Prüfung|Poop| 2020-03-14 05:59:38.062361
  4 |Pooh|Keiner| 2020-03-14 15:14:12.453124
  5 |Machaaki|Was ist damit| 2020-03-14 15:14:12.453124
  6 |Doburok|Damit| 2020-03-14 15:14:12.635542
  7 |seltsam|Keiner| 2020-03-14 15:14:12.635542
  8 |Oh|Korrekt| 2020-03-14 15:14:12.453124
  9 |Neu|Mond| 2020-03-14 15:32:49.082485
 10 |Mädchen|Hoch| 2020-03-14 15:59:30.175208
 11 |Ja wirklich|Beratung| 2020-03-14 15:59:47.029891
 12 |e?|Fondo| 2020-03-14 16:15:58.35794
 13 |Naoki|Prüfung| 2020-03-14 16:24:47.435301
 14 |Pochi|Auch wenn es eine Katze ist, ist es eine Katze.| 2020-03-14 22:52:41.633207
(12 rows)

Löschen Sie als Nächstes das oberste Element mit "Löschen" ("Test", "Kacken").

aus Daten löschen (Tabellenname) wobei id=3;

Dann

cat-bbs::DATABASE=> select * From data;
 id |    name    |      article       |         timestamp          
----+------------+--------------------+----------------------------
  4 |Pooh|Keiner| 2020-03-14 15:14:12.453124
  5 |Machaaki|Was ist damit| 2020-03-14 15:14:12.453124
  6 |Doburok|Damit| 2020-03-14 15:14:12.635542
  7 |seltsam|Keiner| 2020-03-14 15:14:12.635542
  8 |Oh|Korrekt| 2020-03-14 15:14:12.453124
  9 |Neu|Mond| 2020-03-14 15:32:49.082485
 10 |Mädchen|Hoch| 2020-03-14 15:59:30.175208
 11 |Ja wirklich|Beratung| 2020-03-14 15:59:47.029891
 12 |e?|Fondo| 2020-03-14 16:15:58.35794
 13 |Naoki|Prüfung| 2020-03-14 16:24:47.435301
 14 |Pochi|Auch wenn es eine Katze ist, ist es eine Katze.| 2020-03-14 22:52:41.633207
(11 rows)

Gelöscht. Selbst wenn ich es mit einem Browser überprüfe, wird es ordnungsgemäß gelöscht. スクリーンショット 2020-03-14 23.21.23.png

Recommended Posts

Erstellen Sie ein Bulletin Board mit Heroku, Flask, SQL Alchemy
Post Bulletin Board Erstellung mit Flasche
Erstellen Sie Heroku, Flask, Python, Nyanko Bulletin Board mit "CSV-Datei"
Erstellen Sie eine einfache Web-App mit Flasche
Erstellen Sie einen Webdienst mit Docker + Flask
Post Bulletin Board Erstellung mit Flasche
Berühre Flask + laufe mit Heroku
Erstellen Sie eine Homepage mit Django
Erstellen Sie ein Verzeichnis mit Python
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
(Fehler) Stellen Sie eine mit Flask mit Heroku erstellte Web-App bereit
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 2)
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 3)
Erstellen eines Flask-Servers mit Docker
Führen Sie die App mit Flask + Heroku aus
Erstellen Sie einen Poisson-Stepper mit numpy.random
Erstellen Sie mit Django einen Datei-Uploader
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Erstellen Sie mit Class einen Python-Funktionsdekorator
Ich habe Linebot mit Flasche (Anaconda) + Heroku ausprobiert
Erstellen Sie mit Python + PIL ein Dummy-Image.
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Machen Sie einen seltenen Gacha-Simulator mit Flask
Erstellen Sie mit SQLAlchemy Ihren eigenen zusammengesetzten Wert
Erstellen Sie eine GUI-App mit Tkinter of Python
Erstellen Sie eine große Textdatei mit Shellscript
Erstellen Sie ein Sternensystem mit Blender 2.80-Skript
VM mit YAML-Datei (KVM) erstellen
Einfache Web-App mit Python + Flask + Heroku
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
[Python] Erstellen Sie schnell eine API mit Flask
Erstellen Sie mit NetworkX einen verbindenden nächsten Nachbarn
Erste Schritte mit Heroku, Bereitstellen der Flaschen-App
Starten Sie die Flask-Anwendung mit Docker auf Heroku
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Erstellen Sie ein teuflisches Bild mit Blenders Skript
Erstellen Sie eine Matrix mit PythonGUI (Textfeld)
Erstellen Sie ein Diagramm mit Rändern, die mit matplotlib entfernt wurden
Erstellen Sie eine "Congratulations 2.0" -App, die Glückwunschstimmen mit automatischer Telefonantwort mit Twilio API x Python (Flask) x Heroku sammelt
Hochladen mit Heroku, Flask, Python, Git (4)
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Machen Sie Twitter Trend Bot mit Heroku + Python
Erstellen Sie eine mit tkinter erstellte ausführbare GUI-Datei
Erstellen Sie mit Minette für Python einen LINE BOT
Erstellen Sie eine Bildkompositions-App mit Flask + Pillow
Erstelle mit pygame2 eine neue Benutzeroberfläche!
Erstellen Sie eine PDF-Datei mit einer zufälligen Seitengröße
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
Erstellen Sie eine Matrix mit PythonGUI (tkinter-Kombinationsfeld)
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)