2017-04-06 2 views
-2

Ich entwerfe gerade eine Anwendung auf Flask mit Bootstrap und verschiedenen Flask-Plugins mit einem Blick schließlich Hosting auf Heroku. Die App ist im Grunde eine moderne Lochkarte. Mitarbeiter können sich ein- und ausloggen und ihre Arbeit in den vergangenen Wochen und Monaten sowie eine Schätzung darüber, wie viel Geld sie in diesen Zeiten verdient haben, einsehen. Der dB wird dann per Textdatei zum Admin exportierbar sein.Python Flask SQl Alchemy/SQLite Datenbankentwurf

Ich habe es geschafft, Login und Funktionalität zu registrieren, die Benutzereingaben in einer Datenbank speichern, die ich mit Alchemie erstellt habe.

Allerdings ist die Basisfunktion der App, wo ich kämpfe, ich bin nicht gut mit Datenbanken. Jeder Benutzer sollte sich anmelden und dann einsteigen können, um seine Arbeitsschicht zu starten und die Berichte der vergangenen Tage anzuzeigen.

Ich kann nicht scheinen, irgendeine Art und Weise zu finden, um sicherzustellen, dass, wenn sich ein Benutzer anmeldet und Uhren in oder aus und schafft eine Stunde Objekt, das an einem Tisch spezifisch für den Benutzer zu speichern, dass niemand außer dass Benutzer oder ein Administrator kann sehen?

werde ich Code gleich morgen schreiben, aber meine Frage zusammengefasst ist:

Ich kann nicht zu arbeiten scheinen, wie ein Benutzer in erstellt Daten protokolliert, um sicherzustellen, dass nur von ihm/ihr, dass bezieht sich nicht sein von anderen Benutzern gesehen (offensichtlich, da es ihre eigenen Stunden sind, müssen ihre Kollegen es nicht sehen). Ich habe versucht, die FK zu Benutzer-ID, aber ohne Erfolg, ich kann nicht scheinen, die Tabellen zu verknüpfen.

Ich weiß, mit SQLite, da mein dB möglicherweise Probleme verursachen wird, wenn ich Heroku bereitstellen und stattdessen postgresql verwenden.

Antwort

0

Erstellen Sie eine weitere Tabelle, in der Sie protokollieren, wenn Benutzer ein- und auschecken, mit einem ID-Feld (Primärschlüssel), einem Aktionsfeld (Uhr ein oder aus) und einem Datumszeitfeld; Erstellen Sie dann eine weitere Tabelle, die der Benutzer- und Protokollierungstabelle untergeordnet ist, mit zwei Spalten: user_id und logging_id, Fremdschlüssel für users.id bzw. logging.id.

Sie müssen sie dann zuordnen, wie Sie es in flask-sqlalchemy tun (für die "sekundäre" Tabelle müssen Sie die db.Table-Funktion verwenden, erstellen Sie keine Klasse; sehen Sie sich diese nicht verwandte example: Sie benötigen ‚logging_users‘ Sekundärtabelle wie die ‚roles_users‘ im Beispiel zur Karte)

Dann Sie eine Beziehung zwischen den Klassen erstellen müssen. zu Ihrer Benutzerklasse hinzufügen

logging = db.relationship ('Logging', secondary=logging_users, 
           backref=db.backref('users', lazy='dynamic')) 

Jetzt Benutzerinstanz jede Ein zugeordnetes Protokollierungsfeld ist eine Liste, die jede Protokollierungsinstanz enthält, die dem angegebenen Benutzer zugeordnet ist. Sie können einem Benutzer eine Protokollierungsinstanz hinzufügen, indem Sie sie wie bei jedem Listenelement an ihr Protokollierungsfeld anhängen. Beispiel:

log = Logging(action='enter', datetime='2017-04-04T08:14:23') 
current_user.append(log) 

Ich hoffe, ich bin klar!

0

Sie sollten Sitzung verwenden, um Benutzersitzungen zu verwalten. Beachten Sie auch die folgenden Datenbankmodell:

class User: 
    __tablename__ = 'user' 
    username = db.Column(db.String) 
    password = db.Column(db.String) 
    logged_in = db.Column(db.DateTime) 
    logged_out = db.Column(db.DateTime) 

Ihre Variablen wie folgt aussehen:

data = User.query.filter(User.username == session['username']).first() 
user_username = data[0] 
user_password = data[1] 
user_logged_in = data[2] 
user_logged_in = data[3] 

wie Sie sehen können, werden die „Daten“ Objekt nur durch den Benutzer in der Sitzung abgerufen wird, die durch definiert werden kann das Framework, das Sie verwenden, oder Sie selbst, wenn Sie die POST-Daten vom Anmeldeformular erhalten.

hoffe, das hilft