Python Flask SQl Alchemy / SQLite数据库设计

时间:2017-04-06 02:05:01

标签: python sql flask

我目前正在使用bootstrap和各种烧瓶插件在Flask上设计一个应用程序,最终托管在heroku上。该应用程序本质上是一个现代打卡。员工可以登录,上班和下班,查看他们过去几周,几个月的工作情况,并估算他们在这段时间内赚了多少钱。然后,dB可以通过文本文件导出到admin。

我设法编写了登录和注册功能,将用户输入保存到我使用alchemy创建的数据库中。

然而,应用程序的基本功能是我挣扎的地方,我对数据库不太满意。每个用户都应该能够登录然后进入以开始他们的工作班次/时钟并查看前一天的报告。

我似乎找不到任何方法来确保当用户登录并进入或退出时创建一个Hour对象以将其保存到特定于用户的表中除了该用户或管理员可以看到?

我明天会首先发布代码,但我的问题总结如下:

我似乎无法确定如何确保用户登录创建的数据仅与他/她自己无法被其他用户查看(显然是因为它是他们自己的他们的同龄人不需要看小时。我已经尝试将FK设置为​​用户ID,但无济于事似乎无法链接表格。

我知道使用SQLite,因为当我部署到heroku并使用postgresql时,我的dB可能会导致问题。

2 个答案:

答案 0 :(得分:0)

创建另一个表,用户在进入和退出时记录,包含id字段(主键),操作字段(时钟输入或输出)和日期时间字段;然后创建另一个表,它将是用户和日志记录表的辅助表,有2列:user_id和logging_id,分别是users.id和logging.id的外键。

然后您需要映射它们,因为您知道如何在flask-sqlalchemy中执行它(对于" secondary"表,您需要使用db.Table函数,而不是创建类;请看这个不相关的example:您需要映射您的' logging_users'辅助表,例如示例中的' roles_users'。

然后你需要在类之间创建一个关系:到你的User类添加

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

现在每个用户实例都会有一个关联的'日志记录' field,这是一个列表,其中包含与指定用户关联的每个日志记录实例。您可以通过将日志实例附加到其日志字段来向用户添加日志记录实例,就像对每个列表元素一样;例如:

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

我希望我能清楚!

答案 1 :(得分:0)

您应该使用会话来管理用户会话。还要考虑以下数据库模型:

True

您的变量将如下所示:

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”对象仅由用户在会话中检索,可以由您使用的框架定义,也可以在从登录表单获取POST数据时自行定义。

希望这有帮助