Es ist eine Lesung, wenn Sie die folgenden Bücher lesen. Es dauert ungefähr 15 Stunden. (Davon dauert die Arbeit und Forschung rund um den Umweltbau ca. 3 Stunden) Wie bereits erwähnt, hatte ich den Eindruck, dass es sich um ein sehr leichtes Framework handelt, das schnell entwickelt und einfach zu erweitern ist.
Deinstallieren Sie Python, das mit Brew installiert wurde
$ brew uninstall python
$ brew uninstall python3
Deinstallieren Sie Python, das mit dem offiziellen Installationsprogramm installiert wurde
So deinstallieren Sie das auf dem Mac installierte offizielle Python
--Pyenv Setup
Erstellen einer Python-Umgebung auf einem Mac mit pyenv --Qiita
Python-Installation nach Pyenv, Versionsspezifikation, Funktionsprüfung
$ pyenv install -l
$ pyenv install 3.8.2
$ pyenv rehash
$ pyenv global 3.8.2
$ pyenv versions
$ which python
$ python -V
$ python2 -V
$ python3 -V
Rohrinstallation und Funktionsprüfung
$ pip install --upgrade pip
$ pip -V
$ pip3 -V
--Pipenv-Setup (Sie können für jedes Projekt eine eigene Umgebung erstellen und Pakete verwalten)
- $ pip install pipenv
- $ pipenv --version
--MacOS wird standardmäßig mit Python 2.7 geliefert
Die Entität befindet sich unter `/ System / Library / Frameworks / Python.framework
`(kann nicht gelöscht werden, da sie im System verwendet wird)
Darüber hinaus enthält macOS Catalina auch Python 3 (Version ab Mai 2020 ist 3.7.3)
Die Substanz ist `` `/ usr / bin / python3``` (kann auch nicht gelöscht werden)
Wenn Sie sich / usr / bin / ansehen, haben alle Befehle der Serien `python``` und`
python2``` symbolische Links zu Python 2.7, die oben erwähnt wurden.
Der Befehl `` `python3``` ruft nur die direkt platzierte Binärdatei auf, nicht die symbolische Verknüpfung.
$ ls -la /usr/bin/python*
lrwxr-xr-x 1 root wheel 75 10 8 2019 /usr/bin/python -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
lrwxr-xr-x 1 root wheel 82 10 8 2019 /usr/bin/python-config -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
lrwxr-xr-x 1 root wheel 75 10 8 2019 /usr/bin/python2 -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
lrwxr-xr-x 1 root wheel 75 10 8 2019 /usr/bin/python2.7 -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
lrwxr-xr-x 1 root wheel 82 10 8 2019 /usr/bin/python2.7-config -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
lrwxr-xr-x 1 root wheel 76 10 8 2019 /usr/bin/pythonw -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7
lrwxr-xr-x 1 root wheel 76 10 8 2019 /usr/bin/pythonw2.7 -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7
-rwxr-xr-x 1 root wheel 31488 3 18 00:42 /usr/bin/python3
$ ls -la /usr/bin/pip*
-rwxr-xr-x 1 root wheel 31488 3 18 00:42 /usr/bin/pip3
`~ / Library / Python```, aber diese enthalten die mit`
pip``` installierte Bibliothek.--Werkzeug · Jinja2-basiertes Mikroframework für Python, sehr leicht --Werkzeug: Eine einfache WSGI-Dienstprogrammbibliothek --WSGI: I / F-Bibliothek zum Verbinden von Webservern und Webanwendungen in Python --Jinja2: Template-Engine-Bibliothek, die häufig in der Python-Webentwicklung verwendet wird
Es wird nur die Kernfunktion des Empfangens einer Benutzeranforderung und des Zurückgebens des Ergebnisses implementiert.
Standardmäßig sind nur die beiden oben genannten Bibliotheken vorhanden, sodass keine zusätzlichen Dinge wie DB und Authentifizierung vorhanden sind.
Die skalierbare Anwendungserstellung ist durch die Kombination erweiterter Funktionen möglich (hochgradig anpassbar).
--RDB ist ein Set mit Django, aber NoSQL usw. kann mit Flask verwendet werden
Hohe Affinität zu Mikrodiensten
Beispiele für Dienste mit Flask: Netflix, Lyft, Linkedin, Mailgun, Pinterest
Ein Full-Stack-Framework, das die meisten für die Webentwicklung erforderlichen Funktionen enthält
Eine saubere Entwicklung nach Typ ist möglich
Beispiele für Dienste mit Django: Instagram, Bitbucket, Udemy, Dropbox, Spotify, Youtube
--Flazk ist ein MTV-Framework (Modell / Vorlage / Ansicht)
--Wenn Anzeigen in der Ansicht angezeigt werden (render_template), muss "/ templates" nicht in den Pfad aufgenommen werden.
In Flask ist es eine Regel, HTML-Dateien unter dem Vorlagenordner zu erstellen
Wenn Sie in den Routing-Einstellungen `` `Methoden``` angeben, können Sie die für diese URL zulässigen HTTP-Methoden einschränken.
Wenn nichts angegeben ist, ist nur GET zulässig
Da Jinja2 beim Rendern von HTML mit Flask verwendet wird, können bedingte Verzweigungen in HTML und aus der Ansicht empfangenen Variablen verwendet werden.
--Beispiel: `{% wenn nicht session.logged_in%}`
--Verwenden Sie `` `flash```, um dem Benutzer eine Nachricht anzuzeigen
Ansicht: `flash ('message')`
--Template: `get_flashed_messages ()`
Wenn Sie `` `url_for``` verwenden, werden der Linkname und die Methode automatisch verknüpft, sodass Sie den Code auch dann nicht ändern müssen, wenn sich das Linkziel ändert.
Natürlich kann es nicht nur auf der Ansichtsseite, sondern auch auf dem vorlagenseitigen Code geschrieben werden
--``` return render_template ('einträge.html', einträge = einträge) `` `kann verwendet werden, um Argumente an die Vorlage zu übergeben.
--``` url_for ('Methodenname', id = entry.id) `` `kann verwendet werden, um Argumente an Ansichtsmethoden zu übergeben
-- app.route ('/ entry / <id>') Wenn Sie so etwas wie `` `tun, können Sie die in`` url_for
übergebenen Argumente erhalten
--Wenn Sie die Anzahl der erhaltenen Argumente einschränken möchten, verwenden Sie `<int: id>`
(andere Typen führen zu einem Fehler).
--Verwenden Sie redirect und render_template ordnungsgemäß
--Model ist in Python als Klasse definiert
`def __init __ ()`
erstellt wird--``` def repr (self) `` `beschreibt das Ausgabeformat der Konsole, wenn auf das Modell verwiesen wird (es ist nicht erforderlich)
Sobald das Modell definiert ist, muss es in der Datenbank wiedergegeben werden (hauptsächlich auf die folgenden zwei Arten).
So führen Sie die Modelldefinition auf der Konsole aus und spiegeln sie wider
So erstellen und reflektieren Sie ein Skript
Es ist gut, eine Ansicht für jedes Modell vorzubereiten und eine Datei zu erstellen, indem Sie sie eins zu eins zuordnen.
--Flask kann Sitzungsinformationen mit einer Variablen namens `session``` verarbeiten --Einstellungen:
session ['session name'] = True``` --Bestätigung: ``
wenn nicht session.get ('Sitzungsname'): (Verarbeitung)`` --Destroy: ``
session.pop ('Sitzungsname', Keine)` ``
DB
--Flask ist ein MTV-Framework. Wenn Sie also ein Modell definieren, können Sie die Datenbank einfach mit ORM bedienen.
Blueprint
--``` @ app.errorhandler (Statuscode zum Zeitpunkt des Fehlers) `kann den Prozess für jeden Fehlerstatuscode definieren --Wenn Sie Blueprint verwenden, verwenden Sie
@ (App-Name) .app_errorhandler (Statuscode zum Zeitpunkt des Fehlers)
``
Die Befehlszeile --flask kann ebenfalls verwendet werden
$ export FLASK_APP = (Pfad des Verzeichnisses mit __init __. py) `` `: Wenn Sie es dauerhaft machen möchten, fügen Sie es der Shell-Konfigurationsdatei entsprechend hinzu. --
$ export FLASK_ENV = development```: Beim Start im Debug-Modus (Produktionsmodus, falls nicht festgelegt)Es gibt verschiedene Python-Testbibliotheken (diesmal verwende ich den Python-Standard-Unit-Test).
--Schreiben Sie die Test-DB-Einstellungen in die Anwendungskörperdatei, damit die Testkonfiguration gelesen werden kann.
-- def setup (self) `` `: Die erste Methode, die ausgeführt wird, wenn der Test ausgeführt wird --
def tearDown (self) `: Methode, die kurz vor dem Ende des Tests ausgeführt wird --``` def test _... ()
`: Testmethodenkörper
Die Testabdeckung kann mit der `` `Coverage```-Bibliothek gemessen werden
$ pipenv install coverage
--Erstellen Sie `.coveragerc``` und schreiben Sie Folgendes, um den zu testenden Ordner anzugeben. --``` [run] source = ./ (path)
`$ coverage run -m unittest
-- $ Abdeckungsbericht -m
: Abdeckungsmessung
-- $ Coverage html
: Erstellen eines Coverage-Berichts--``` static `` Der Bereich unter dem Verzeichnis wird automatisch als Speicherort für statische Dateien wie CSS und JS erkannt.
Verwendungsbeispiel: `` <link rel =" stylesheet "href =" {{url_for ('static', filename = 'style.css')}} ">
`
Es gibt eine Beschreibung zum Importieren von `` `jquery-3.2.1.slim.min.js``` aus dem jQuery-CDN, aber im Moment ist es notwendig, 3.2.1 auf 3.5.1 umzuschreiben.