2017-04-06 67 views
-2

我目前正在使用bootstrap和各種瓶塞插件來設計一個應用程序,並最終託管在heroku上。該應用程序本質上是一個現代打卡。員工可以登錄,進入和離開班次,查看他們在過去幾周,幾個月中的工作情況,以及他們在這段時間內收入多少的估計。然後dB可以通過文本文件輸出到管理員。Python燒瓶SQl Alchemy/SQLite數據庫設計

我已經設法編寫登錄和註冊功能,將用戶輸入保存到我使用鍊金術創建的數據庫中。

然而,應用程序的基本功能是我在掙扎的地方,我對數據庫並不擅長。每個用戶都應該能夠登錄然後登錄,開始工作班次/計時並查看前一天工作的報告。

我似乎無法找到任何方式來確保當用戶登錄並輸入或輸入時鐘並創建一個Hour對象以將其保存到特定於用戶的表中時,該用戶除了該用戶或管理員可以看到?

,我將發佈代碼的第一件事,明天可是我總結的問題是:

我似乎無法工作,如何確保登錄的用戶創建一個只涉及到他的數據/她自己不能由其他用戶查看(顯然,因爲他們自己的小時,他們的同伴不需要看到它)。我曾嘗試設置FK到用戶ID,但無濟於事我似乎無法鏈接表。

我知道使用SQLite作爲我的dB可能會導致問題,當我部署到heroku和使用postgresql來代替。

回答

0

創建另一個表,當用戶輸入和輸出時,用戶可以使用id字段(主鍵),動作字段(時鐘輸入或輸出)和日期時間字段記錄日誌;然後創建另一個表,這將是用戶和日誌記錄表的次要表,它具有2列:user_id和logging_id,外鍵分別爲users.id和logging.id。

然後您需要映射它們,因爲您知道如何在flask-sqlalchemy中執行此操作(對於「secondary」表,您需要使用db.Table函數,而不是創建類;請看這個不相關的example:需要你的「logging_users」二次表映射像本例中的「roles_users」)

然後,你需要創建類之間的關係:你的用戶類添加

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

現在每個用戶實例將具有關聯的「日誌記錄」字段,該字段是包含與指定用戶關聯的每個日誌記錄實例的列表。您可以通過將日誌實例附加到日誌記錄字段來添加日誌記錄實例,就像您對每個列表元素所做的一樣;例如:

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

我希望我很清楚!

0

您應該使用會話來管理用戶會話。此外,還應考慮以下數據庫模型:

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) 

您的變量將是這樣的:

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] 

,你可以看到,在「數據」對象只能由會話的用戶可以通過定義檢索您使用的框架,或從登錄表單獲取POST數據時自己。

希望這會有幫助