[PYTHON] Schritte zum Einrichten von Pipenv, Erstellen einer CRUD-App mit Flask und Containerisieren mit Docker

Hintergrund des Schreibens des Artikels

Ich werde mich diesen Monat von meinem derzeitigen SIer zurückziehen und denke darüber nach, Ingenieur für die Infrastruktur zu werden. Beim Aufbau einer Infrastruktur und einer CI / CD-Umgebung, die in den letzten Jahren die öffentlichen Clouds voll ausnutzt, sollte selbst ein älterer Ingenieur wie ich vermeiden, Apps in verschiedenen Sprachen zu erstellen oder Apps zur Überprüfung der Kommunikation zu erstellen. Ungefähr zu dieser Zeit habe ich das Gefühl, dass ich nicht mehr bestehen kann.

Ich wollte mein Bestes geben, um verschiedene Sprachen zu erstellen und eine kleine Webanwendung zu erstellen. Deshalb habe ich dieses Mal das Verfahren beschrieben, um eine Flask-Anwendung (nur durch Berühren) mit Python und Pipenv zu erstellen und daraus einen Docker-Container zu machen.

Pipenv installieren

In den letzten Jahren wurde die Python-Umgebungskonstruktion anscheinend mit einem Tool namens Pipenv erstellt, daher habe ich versucht, es zu verwenden. Es ist wie JavaScript npm und einfach zu bedienen.

pip install pipenv

App-Projekt erstellen

mkdir flask-app
cd flask-app

Dieses Mal werde ich Python 3.8 verwenden.

pipenv --python 3.8
pipenv install flask
pipenv install --dev autopep8

Erstellen Sie eine leere Datei, die erstellt werden soll.

mkdir src
touch src/main.py
touch Dockerfile
touch .dockerignore

Zum Abschnitt "Skripte" der "Pipfile" hinzufügen.

[scripts]
start = "python src/main.py"

Codierung der Kolbenanwendung

Es wird ein Code sein, der von einem Python-Amateur geschrieben wurde, aber ich habe ihn wie folgt erstellt.

src/main.py


import sqlite3
import flask

app = flask.Flask(__name__)


def get_db():
    db = getattr(flask.g, '_database', None)
    if db is None:
        db = flask.g._database = sqlite3.connect('mydb.sqlite')
    return db


@app.teardown_appcontext
def close_conn(exception):
    db = getattr(flask.g, '_database', None)
    if db is not None:
        db.close()


@app.route('/todos/<id>', methods=['GET'])
@app.route('/todos', methods=['GET', 'POST'])
def todos(id=None):
    db = get_db()

    #Erstellen Sie eine Tabelle, wenn Sie eine Anfrage erhalten
    curs = db.cursor()
    curs.execute(
        'create table if not exists todos('
        'id integer primary key autoincrement, title string)'
    )

    id = flask.request.values.get('id', id)

    if flask.request.method == 'GET' and id is not None:
        curs.execute('select * from todos where id = {}'.format(id))
        response = curs.fetchone()
        if response is not None:
            id, title = response
            return flask.jsonify(todo={"id": id, "title": title}), 200

        return flask.jsonify(message='resource not found'), 400

    if flask.request.method == 'GET':
        curs.execute('select * from todos')
        response = curs.fetchall()
        todos = []
        for todo in response:
            id, title = todo
            todos.append({"id": id, "title": title})

        return flask.jsonify(todos=todos), 200

    if flask.request.method == 'POST':
        title = flask.request.json['title']
        curs.execute('insert into todos(title) values("{}")'.format(title))
        db.commit()
        return flask.jsonify(message='created new toto')


def main():
    app.debug = True
    app.run(host='0.0.0.0', port=5000)


if __name__ == "__main__":
    main()

Zu diesem Zeitpunkt sollte es in Ihrer lokalen Umgebung funktionieren.

pipenv run start

 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 208-926-045

Drücken Sie den Curl-Befehl, um dies zu überprüfen.

curl -XPOST -H 'Content-Type: application/json' localhost:5000/todos -d '{"title": "new task1"}'
curl -XPOST -H 'Content-Type: application/json' localhost:5000/todos -d '{"title": "new task2"}'
curl localhost:5000/todos
curl localhost:5000/todos/1

Erstellen und Erstellen einer Docker-Datei

Ich kenne die Praxis in Kombination mit Pipenv nicht, aber ich habe sie mit Simple is Best gemacht.

FROM python:3.8

ENV LC_ALL=C.UTF-8 \
    LANG=C.UTF-8

WORKDIR /app
COPY . .

RUN pip install pipenv
RUN pipenv install

CMD ["pipenv", "run", "start"]

EXPOSE 5000

Erstellen Sie auch eine .dockerignore-Datei.

.dockerignore


*.sqlite
.git

Bauen.

docker image build -t flaskapp:latest . 

Starten Sie den Container (starten Sie den lokalen Port als 15000).

docker container run -it -p 15000:5000 --rm flaskapp:latest

 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 954-331-726

Es ist in Ordnung, wenn Sie dies durch Drücken des Befehls curl bestätigen können.

curl -XPOST -H 'Content-Type: application/json' localhost:15000/todos -d '{"title": "new task1"}'
curl -XPOST -H 'Content-Type: application/json' localhost:15000/todos -d '{"title": "new task2"}'
curl localhost:15000/todos
curl localhost:15000/todos/1

abschließend

Ich war an npm und Garn in NodeJS gewöhnt, daher habe ich es vermieden, eine Python-Umgebung zu erstellen, aber ich fand Pipenv nützlich. Ich kannte Pipenv nicht und hatte das Gefühl, es verloren zu haben.

Aus Sicht eines Infrastrukturingenieurs (subjektiv) bin ich vorerst zufrieden, weil ich es bisher getan habe. Wir werden unser Bestes tun, um die Umgebung bereitzustellen, ohne den App-Ingenieur zu stören.

Obwohl ich mich bis vor ungefähr fünf Jahren nicht an viel erinnerte, sind die Veränderungen in der Umgebung der IT-Technologie heutzutage enorm. Es wurde zurückgelassen, aber ich versuche verzweifelt, es einzuholen.

Recommended Posts

Schritte zum Einrichten von Pipenv, Erstellen einer CRUD-App mit Flask und Containerisieren mit Docker
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Erstellen Sie eine einfache Web-App mit Flasche
Erstellen Sie einen Webdienst mit Docker + Flask
Stellen Sie die Lambda-Funktion ein und lassen Sie sie mit S3-Ereignissen arbeiten!
Schritte zum Erstellen eines Twitter-Bots mit Python
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Erstellen Sie eine Kolben-App mit Tensorflow und Dlib für Centos7
Erstellen Sie eine Web-App, die PDF mit Flask und PyPDF2 in Text konvertiert
Beachten Sie, dass ich süchtig danach war, TensowFlow einzurichten
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
[Linux] Erstellen Sie ein Selbstzertifikat mit Docker und Apache
Von der Einführung von Flask unter CentOS bis zum Service unter Nginx und uWSGI
Mit der Docker-Version der Nginx-Einheit war es ein wenig schwierig, eine Flasche zu machen
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Schritte zum schnellen Erstellen einer umfassenden Lernumgebung auf einem Mac mit TensorFlow und OpenCV
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
So richten Sie WSL2 unter Windows 10 ein und erstellen eine Lernumgebung für Linux-Befehle
Erstellen Sie ein Bereitstellungsskript mit Stoff und Küche und verwenden Sie es erneut
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
So legen Sie eine Verknüpfung fest, um in IBus zwischen voller und halber Breite zu wechseln
Erstellen Sie eine temporäre Datei mit Django als Zip und geben Sie sie zurück
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Schritte zum Erstellen eines Django-Projekts
Erstellen eines Flask-Servers mit Docker
Richten Sie einen yum-Repository-Server unter CentOS 7 ein und verweisen Sie lokal und von anderen Servern usw. darauf.
Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten
Senden Sie E-Mails mit mailx an einen mit Python eingerichteten Dummy-SMTP-Server.
Erstellen Sie eine Django-App auf Docker und stellen Sie sie in AWS Fargate bereit
Vorgehensweise zum Erstellen einer virtuellen Python-Umgebung mit VS-Code unter Windows
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
So machen Sie den Containernamen in Docker als Subdomain zugänglich
Todo-App mit Django erstellen ④ Ordner- und Aufgabenerstellungsfunktion implementieren
Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (5. Information Entropy)
Erstellen Sie eine GUI-App mit Tkinter of Python
Ich habe mir eine Möglichkeit ausgedacht, ein 3D-Modell aus einem Foto zu erstellen. Teil 02 Laden von Bildern und Zeichnen von Scheitelpunkten
Erstellen Sie eine Python-GUI-App in Docker (PySimpleGUI).
Erstellen Sie eine einfache App, die die Fetch-API für Ajax-Anforderungen in Flask enthält, und erklären Sie sie schnell.
Erstellen Sie eine API zum Konvertieren von PDF-Dateien in TIF-Bilder mit FastAPI und Docker
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
Verwenden Sie den Befehl [shell], um eine beliebige Datei zu komprimieren, um eine Datei zu erstellen und die Originaldatei zu löschen.
Erstellen Sie mit matplotlib ein gestapeltes Diagramm, das sowohl der positiven als auch der negativen Richtung entspricht
Installieren Sie Jupyter Notebook und stellen Sie es so ein, dass eine Umgebung zum Erstellen von Studiennotizen erstellt wird [Mac]
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Ich habe versucht, ein Projekt mit Python on Docker mit PyCharm zu erstellen, aber es hat mit Docker Compose funktioniert
Richten Sie einen einfachen HTTPS-Server mit Asyncio ein
Richten Sie einen lokalen Server mit Go-File-Upload ein.
Erstellen Sie eine Bildkompositions-App mit Flask + Pillow
Erstellen Sie ein Bulletin Board mit Heroku, Flask, SQL Alchemy
Richten Sie einen lokalen Server mit Go-File-Download ein.
So bereiten Sie die Umgebung mit Courseras fortgeschrittenem Kurs für maschinelles Lernen auf Google Colab vor
So richten Sie ein VPN-Gateway ein, um eine Verbindung zwischen Alibaba Cloud und AWS herzustellen
[Einführung in den Systemhandel] Ich habe einen Stochastic Oscillator mit Python gezeichnet und damit gespielt ♬