[PYTHON] Die Ordnerstruktur von Flask ist zusammengefasst

Eine Person, die mit Django ständig Web-Systeme entwickelt. Ich habe vor kurzem angefangen, Flask zu studieren, weil ich in meiner Freizeit eine einfache App erstellen möchte. Es ist nicht gut, zu viele Einstellungen in eine Datei zu packen, deshalb habe ich die auf MVC basierende Verzeichnisstruktur zusammengefasst.

flask_app
├ common
│ ├ libs
│ └ models  ---Modell-
│   ├ user.py
│ └ ・ ・ ・
├ config ---Einstellungsordner
│ ├ base_setting.py ---Gemeinsame Einstellungen für jede Umgebung
│ ├ local_setting.py ---Einstellungen für die lokale Entwicklungsumgebung
│ └ production_setting.py ---Einstellungen für die Produktionsumgebung
├ controllers ---Regler
│ ├ index.py
│ └ ・ ・ ・
├ interceptors 
│ ├ auth.py ---Verarbeitung des Authentifizierungssystems
│ └ error_handler.py ---Fehlerbehandlung
├ static ---Speicherort der statischen Datei
├ templates ---Vorlage
│ ├ common
│ │ └ layout.html
│ └ index.html
├ application.py ---Definieren Sie, was von mehreren Dateien verwendet wird (Flask-Instanz, DB, Umgebungsvariablen usw.).
├ manager.py ---App-Ausführungsskript (App-Eingang)
├ requirements.py ---Bibliotheksliste
└ www.py ---Routing

Ausführungsablauf

Beschreibung der Dateirolle

Ich werde in der Reihenfolge erklären.

app.config.from_pyfile("config/base_setting.py")Lesen Sie zuerst die allgemeinen Einstellungen mit. Die Einstellungen, die sich je nach Umgebung (Entwicklung / Produktion) ändern, sind die voreingestellten Umgebungsvariablen ops._Geändert, um je nach unterschiedlichem Konfigurationswert unterschiedliche Einstellungsdateien zu lesen.




#### **`flask_app/application.py`**
```flask

from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)

manager = Manager(app)
app.config.from_pyfile("config/base_setting.py")

# linux export ops_config=local|production
# windows set ops_config=local|production
if "ops_config" in os.environ:
    app.config.from_pyfile("config/%s_setting.py" % (os.environ['ops_config']))

db = SQLAlchemy(app)

Der Inhalt von Steuerungen ist in Funktionseinheiten unterteilt und wird unter Verwendung von Blaupausen unter www.py integriert.

flask_app/www.py


from interceptors.errorHandler import *
from interceptors.Auth import *
from application import app
from controllers.index import index_page

from flask_debugtoolbar import DebugToolbarExtension
toolbar = DebugToolbarExtension(app)


app.register_blueprint(index_page, url_prefix="/")

Definieren Sie das Modell in Modellen. Hier wird in user.py ein Testmodell definiert.

flask_app/common/models/user.py


from application import db


class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(20), nullable=False)

Definieren Sie die eigentliche Verarbeitung in Controllern.

flask_app/controllers/index.py


from flask import Blueprint, render_template
from common.models.user import User

index_page = Blueprint("index_page", __name__)


@index_page.route("/")
def index():
    name = "hello"
    context = {"name": name}
    context["user"] = {"nickname": "xxxx",
                       "id": "xxxxx", "home_page": "http://www.xxx"}
    context["num_list"] = [1, 2, 3, 4, 5]

    result = User.query.all()
    context['result'] = result

    return render_template("index.html", **context)

Registrieren Sie die Befehle runserver und create_all mit der add_commend-Methode des Managers.

flask_app/manager.py


 from application import app, db, manager
from flask_script import Server, Command
from www import *

# web server
manager.add_command("runserver", Server(host = "0.0.0.0", use_debugger=True, use_reloader=True))

# create tables
@Command
def create_all():
    from common.models.user import User  
    db.create_all()

manager.add_command("create_all", create_all)

def main():
    manager.run()
    
if __name__ == "__main__":
    # app.run( host = "0.0.0.0" )
    
    try:
        import sys
        sys.exit( main() )
    except Exception as e:
        import traceback
        traceback.print_exc()

Lauf

http://localhost:Greifen Sie auf 5000 zu und erfolgreich, wenn der nächste Bildschirm angezeigt wird!


 ![flask_app_image.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545184/b64db0c9-64cf-0b1b-e7a8-9935f14b5008.jpeg)


## Quelle
 Ich habe die Quelle auf gitHub hochgeladen. Wenn Sie also Zeit haben, [Download](https://github.com/shixujapan/flask_app) und spielen Sie damit.
## Was macht man als nächstes

 * Erstellen Sie eine einfache CRUD-App mit Flask
 * Betrachten Sie die Zusammenarbeit mit Vue.js


Recommended Posts

Die Ordnerstruktur von Flask ist zusammengefasst
Ich habe 11 Arten von Betriebssystemen zusammengefasst
Ich habe den Mechanismus der Flaschenanmeldung untersucht!
[Python] Organisieren Sie die Grundstruktur der Flask-App (Ziel des Entkopierens)
[Super-Grundlagen von Python] Ich habe die Grundlagen der Grundlagen gelernt und sie daher kurz zusammengefasst.
Ich habe zusammengefasst, wie die Boot-Parameter von GRUB und GRUB2 geändert werden
Ich habe den Inhalt des Docker-Volumes überprüft
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Ich kannte die Grundlagen von Python nicht
[Python] Ich habe die grundlegende Grammatik persönlich zusammengefasst.
Die Python-Projektvorlage, an die ich denke.
[Ich habe den Raspberry Pi (1) berührt] Ich habe die grundlegenden Funktionen der Minecraft Pi Edition (Vorabversion 2015.5.23) zusammengefasst.
Da die Extraktion von Synonymen mit Word2Vec gut verlief, habe ich versucht, die Analyse zusammenzufassen
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe die Implementierung von range gelesen (Objects / rangeobject.c)
Ich habe das tiefste Problem von Hiroshi Yuki gelöst.
Ich berührte Flask
Ich habe Flask mit Remote-Containern von VS Code ausprobiert
Ich habe das Jahr, in dem ich selbst Datenwissenschaft studiert habe, zusammengefasst.
Ich habe die Liste der Tastenkombinationen von Jupyter überprüft
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Probieren Sie Progate Free Edition [Python I]
Ich habe die Sitzungsaufbewahrungsdauer von Django überprüft
Ich habe die Verarbeitungsgeschwindigkeit der numpy eindimensionalisierung überprüft
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
Ich habe die Varianten von UKR gelesen und implementiert
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Berechnen Sie das Volumen aus der zweidimensionalen Struktur einer Verbindung
Ich möchte das Ausführungsergebnis von strace erfassen
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Ich verfolgte die Implementierung des Befehls du (erste Hälfte)
Ich verglich die Identität der Bilder nach Hu Moment
Vielleicht habe ich die Auswirkungen von Shell Shock auf CGI überschätzt
Ich habe die Ausgabespezifikationen von Bidirectional LSTM von PyTorch überprüft
Ich habe mir die Versionen von Blender und Python angesehen
Ich möchte die Grundlagen von Bokeh vollständig verstehen
Die Leistung von PHP war besser als ich erwartet hatte
Ich habe das Argument class_weight von Chainers Funktion softmax_cross_entropy untersucht.
Ich habe die Leistung von 1 Million Dokumenten mit mongoDB gemessen
Ich habe das Standardbetriebssystem und die Shell der Docker-Maschine überprüft
Ich verfolgte die Implementierung des Befehls du (zweite Hälfte)
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen
Ich untersuchte den stärkenden Lernalgorithmus des Algorithmushandels
Ich habe die einfachste Methode zur Klassifizierung von Dokumenten mit mehreren Etiketten ausprobiert
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich möchte die Sicherheit der SSH-Verbindung erhöhen
Ich habe nach dem Inhalt von CloudWatch Logs Agent gesucht
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Der Beginn von cif2cell
Ordnerstruktur zur Analyse