Ich habe eine Flasche Anwendung, in der ich einige Daten analysieren und einige Diagramme basierend auf diesen Daten zeichnen. Bis jetzt habe ich die Analyse und das Zeichnen von Grafiken in meiner Datei views.py in meiner Indexmethode durchgeführt. Dies ist nicht sehr gut, da jedes Mal, wenn ich eine "Aktualisierung" in meinem Browser durchführe, die gesamte Analyse wiederholt und die Graphen überall gezeichnet werden.Ist es möglich, Variablen aus __init__.py in views.py zu importieren?
Meine Projektstruktur ist wie folgt:
Data Analysis/
- app/
- static/
- templates/
- base.html
- index.html
- __init__.py
- models.py
- views.py
- venv/
- run.py
- config.py
Ich dachte an meine Datenanalyse zu meinem __init__.py Modul, da dies nur würde das Bewegen der erforderlichen Daten die Berechnung, wenn die Anwendung ausgeführt wird, statt erneut ausführen es bei jeder Aktualisierung. Die Hürde, auf die ich gestoßen bin, importiert tatsächlich die Daten, die ich in meinem Modul views.py von meinem Modul __init__.py benötige.
Wie wird das gemacht?
Ich habe versucht, die folgenden:
__init__.py
from flask import Flask, url_for, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
def do_data_analysis():
#... lots of calculations
return data
VALUES = do_data_analysis()
views.py
from app import app, models, __init__ #does not work
from __init__ import VALUES #does not work
import VALUES #does not work
from app import VALUES # does not work
VALUES = __init__.VALUES #does not work
Gibt es eine andere und vielleicht auch mehr richtige Weg, dies zu tun?
EDIT:
Ich habe es geschafft, um es durch die Schaffung eines Moduls (data_analysis.py
), in dem ich meine Daten alle Analysen bin Durchführung erhalten zu arbeiten. Dies bedeutet auch, dass in meinem __init__.py
ich meine Datenanalyse entfernt haben, und ich habe jetzt stattdessen die folgenden in meinem view.py
:
from app import data_analysis
Jetzt kann ich tun:
GPSVALUES = data_analysis.VALUES
#do something with the values..
Es ist jedoch scheinen Führen Sie das Skript zweimal aus. Zuerst beim Start meines . Es scheint, das Skript nur beim Starten der run.py
. Und dann wieder, wenn die erste Anfrage kommt inrun.py
ausgeführt wird. Und wenn die Seite aktualisiert wird, führt sie das Skript nicht erneut aus, was ich von Anfang an wollte. Deshalb denke ich, ich werde mit dieser Lösung gehen, es sei denn ich keine andere Lösung kommt in. (Ich eine Antwort hinzufügen wird, sobald ich einige Tests gemacht habe)
Ihre Prämisse gibt, ist fehlerhaft. Es gibt nichts daran, Code in "__init__" zu haben, was bedeutet, dass es nur einmal ausgeführt wird; Sie können den gleichen Effekt erzielen, indem Sie eine Modulebene in views.py einfügen. –
Wenn ich ein sekundäres Modul für meine Datenanalyse auf der gleichen Ordnerebene wie meine views.py erstellen würde, müsste ich es irgendwo ausführen. Wenn ich es in meinem views.py ausführen würde, löst es mein Problem nicht wirklich. – Zeliax
Ja, wenn Sie es auf Modulebene ausführen. –