gpt4 book ai didi

python - Python 中包含单项组的应用程序布局

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:26 24 4
gpt4 key购买 nike

我来自 PHP 世界,经常使用 Joomla。现在我正在构建一个 Python web 应用程序,当我遇到一个非常基本的问题时,我的第一步是创建用户管理:当你的模型只代表一个数据库行时,你如何管理一个类中的所有用户。

举个例子会更清楚。这是 Joomla 所做的:

JUser::getInstance($userid)

它所做的是 JUser 类,它有一个静态方法 getInstance(),该方法对在所有实例中都有效的静态变量进行操作。通过这种方式,JUser 管理所有用户,同时仅将一个 用户表示为该类的一个实例。

现在在 Python 上我使用 SQLAlchemy 并有一个像这样的类:

class User(Base):

...等等。在我现在开始做来自蹩脚的 PHP 世界的蹩脚的东西之前,我想知道:这里正确和干净的方法是什么?构建一个包含所有用户的新 Users 类?还是这种静态方法是个好概念?

我已经在谷歌上搜索了一段时间,但我似乎无法找到关于这个主题的内容:使用 MV(C) 模型在 Python 中构建更大的应用程序。任何人都有我可以阅读的任何好的链接吗?

以更具体的方式:我该如何解决这个问题?

最佳答案

您应该创建一个模型类,就像 Joomla 所做的那样:

class User(Base):
...

然后您可以使用 SQLAlchemy 的通用功能,并查询您需要的用户,

使用主键:

user = session.query(User).get(user_id)

或使用唯一的用户名/电子邮件:

user = session.query(User).filter(User.username==my_username).first()

谈到为当前 HTTP 请求登录的用户,Web 框架通常会自动为您提供一个实例,并将其传递给您正在实现的 HTTP 请求处理程序。例如,Django 框架为您提供开箱即用的 ORM 用户实例,因为它具有所有身份验证和 session 功能。我还将 Flask 微框架与 Flask-login 模块和 SQLAlchemy 一起使用,在那里你需要实现一个回调,它通过用户 Id 加载用户实例,就像我之前说的:

@login_manager.user_loader
def load_user(userid):
# just query for user
return User.query.get(userid) # User.query is Flask-SQLAlchemy extension, it's same to session.query(User).get(userid)

然后您可以从线程局部变量中获取您的用户实例:

from flask.ext.login import login_required, current_user

@app.route('/hello/')
@login_required
def my_request_handler():
return "<html><body>Current user is %s</body></html>" % current_user.username

当然你可以实现一个静态方法,如果你需要通过 Id 获取用户实例的快捷方式:

class User(Base):
...

@classmethod
def by_id(cls, id):
return session.query(cls).get(id)

(其中 SQLAlchemy 的 session 以某种方式全局定义)

对于 Python/web 应用程序架构,您可以查看 Django — 它是非常流行且易于使用的一体式框架,并且它具有类似 MVC 的架构。就read the tutorial .

(但请注意,与 SQLAlchemy 相比,Django 自己的 ORM 功能非常有限,如果您希望使用 Django)。

关于python - Python 中包含单项组的应用程序布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11141840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com