问题标签 [pyramid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
123772 浏览

python - SQLAlchemy - 获取表列表

我在文档中找不到有关此的任何信息,但是如何获取在 SQLAlchemy 中创建的表的列表?

我使用类方法来创建表。

0 投票
1 回答
1374 浏览

python - 在 Pyramid 中,使用遍历,如何创建动态 url?

我是 Pyramid 的新手,并创建了一个应用程序。我有一个带有类别表的数据库。一个类别可能是具有红色和绿色属性的颜色,另一个类别可能是具有属性 4 和 5 的大小。我希望能够创建类似于:domain.com/{category} 的链接。假设我有两个类别模板。一个是 color.mak,一个是 size.mak。我将如何获得它,以便 domain.com/Red 或 domain.com/Green 将呈现 color.mak 而 domain.com/4 或 domain.com/5 将呈现 size.mak?在阅读了 URL Dispatch 和 Traversal 之间的区别之后,似乎 Traversal 更适合我想要的东西,即使它可以通过任何一种方式完成。我真正坚持的是如何将这些类别添加到我的资源树中。

0 投票
3 回答
8526 浏览

python - 如何在 Pyramid 应用程序启动期间获取 Registry().settings?

我习惯在 Django 和 gunicorn 上开发 Web 应用程序。

对于 Django,Django 应用程序中的任何应用程序模块都可以通过django.conf.settings获取部署设置。“settings.py”是用 Python 编写的,因此可以动态定义任意设置和预处理。

在gunicorn的情况下,它有三个配置位置,按优先顺序排列,一个设置注册表类实例结合了这些。(但通常这些设置只用于gunicorn而不是应用程序。)

  1. 命令行参数。
  2. 配置文件。(如 Django,用 Python 编写,可以动态进行任意设置。)
  3. 粘贴应用程序设置。

在 Pyramid 的情况下,根据 Pyramid 文档,部署设置通常可以放入pyramid.registry.Registry().settings。但它似乎只有在存在pyramid.router.Router()实例时才能访问。也就是说,在应用程序“main.py”的启动过程中,pyramid.threadlocal.get_current_registry().settings 返回 None。

比如我通常在SQLAlchemy模型模块中定义一些业务逻辑,需要部署设置如下。

myapp/models.py

但是,“settings['external_api_endpoint']”会引发 TypeError 异常,因为“settings”是 None。

我想了两个解决方案。

  • 在“models.py”中定义一个接受“config”参数的可调用对象,“main.py”使用 Configurator() 实例调用它。

    myapp/models.py

    /li>
  • 或者,放置一个空模块“app/settings.py”,稍后将设置放入其中。

    myapp/__init__.py

    /li>

和其他方案都满足要求,但我觉得麻烦。我想要的是以下内容。

  • 开发.ini

    定义粗略的设置,因为 development.ini 只能有字符串类型的常量。

    /li>
  • 我的应用程序/settings.py

    基于 development.ini 定义详细设置,因为可以设置任意变量(类型)。

    /li>

然后,其他模块可以通过“import myapp.settings”获取任意部署设置。或者,如果 Registry().settings 比 "settings.py" 更可取,则 **settings kwargs 和 "settings.py" 可以在 "main.py" 启动过程中合并并注册到 Registry().settings 中。

无论如何,如何在启动时获取设置字典?或者,Pyramid 温和地迫使我们将需要部署设置的每个代码放在“视图”可调用对象中,这些可调用对象可以随时通过request.registry.settings获取设置字典?


编辑

谢谢,迈克尔和克里斯。

我终于明白为什么 Pyramid 使用线程局部变量(注册表和请求),特别是用于多个 Pyramid 应用程序的注册表对象。

然而,在我看来,部署设置通常会影响可能定义特定应用程序的业务逻辑。这些逻辑通常放在一个或多个 Python 模块中,这些模块可能不是“app/ init .py”或“app/views.py”,它们可以轻松访问 Config() 或 Registry()。这些 Python 模块通常在 Python 进程级别是“全局的”。

也就是说,即使有多个 Pyramid 应用程序共存,尽管它们有自己的线程局部变量,它们也必须共享那些可能在 Python 进程级别包含应用程序特定内容的“全局”Python 模块。

当然,每个这些模块都可以有“initialize()”callalbe,它由应用程序“main”可调用的 Configurator() 调用,或者通过这么长的一系列函数调用传递 Registory() 或 Request() 对象可以满足通常的需求要求。但是,我猜 Pyramid 初学者(如我)或拥有“大型应用程序或这么多设置”的开发人员可能会觉得麻烦,尽管这是 Pyramid 设计。

所以,我认为 Registry().settings 应该只有真正的“线程本地”变量,而不应该有正常的业务逻辑设置。开发人员应负责分离多个特定于应用程序的模块、类、可调用变量等。截至目前,从我的角度来看,我会接受克里斯的回答。或者在“main”可调用文件中,执行“execfile('settings.py', settings, settings)”并将其放在某个“全局”空间中。

0 投票
1 回答
594 浏览

python - 如何使用 mongodb 在金字塔中创建单元测试?

我有一个使用 mongodb 进行存储的金字塔项目。现在我正在尝试编写一个测试,但是如何指定与 mongodb 的连接?

更具体地说,我应该连接到哪个数据库(测试?)以及如何使用夹具?在 Django 中,它创建了一个临时数据库,但它在金字塔中如何工作?

0 投票
1 回答
836 浏览

python - (Python/Pyramid)拥有标准列表/表单编辑器的更好方法?

我正在处理许多 Pyramid(前 Pylons)项目,并且经常需要显示一些内容的列表(比如用户帐户、日志条目或只是一些其他数据)。用户应该能够对列表进行分页,单击一行并获得一个表单,他/她可以在其中编辑该行的内容。

现在我总是通过使用Webhelpers进行分页的 Mako 模板、用于提供对话框的 Jquery UI 以及我在客户端和服务器上手工制作编辑器表单和 AJAX 请求来重新发明轮子。

如您所知,这会耗费大量时间。所以我想知道的是:有没有更好的方法来提供列表、编辑器对话框和服务器/客户端通信,而不必每次都重新发明轮子?

我听说 Django 通过提供开箱即用的用户帐户和其他东西来减轻负担。但在我的情况下,它不仅仅是关于用户帐户,它可以是存储在 SQL 数据库中服务器端的任何类型的数据,用户应该能够对其进行编辑。

提前致谢!

0 投票
1 回答
916 浏览

python - Python 无法正确处理来自 HTML 文本区域的文本输入

我在 HTML 页面上有一个标准表单,具有通常的输入类型:text, select, submit. 使用 Python(Pyramid框架)处理这些表单非常简单且没有问题。

但是,在这种特殊形式中,我需要使用 atextarea来接受更长的多行输入。在 Python 中处理用户输入时,我使用了以下代码:

这适用于text输入,但不适用于textarea输入。 textarea包含 unicode 字符时不处理输入,并引发以下错误:

这有什么原因吗?看起来它假设textarea输入被视为 ASCII 而不是 UTF-8,但我不确定如何更改它。

更多信息:提交表单的页面是一个 HTML5 页面,其字符集设置为 UTF-8。

编辑: 弗拉基米尔帕兰特建议它已经被解码,我检查了这个:

print isinstance(request.params['form_element'], str)返回False

print isinstance(request.params['form_element'], unicode)返回True

0 投票
2 回答
3014 浏览

python - 在 Pyramid 中,如何根据上下文内容使用不同的渲染器?

我有 3 种不同的产品页面布局,我想根据有关产品的可用信息显示它们。使用遍历,我有一个名为的类ProductFinder,它可以获取所有信息。例如,用户转到 domain/green/smallProductFinder并将列出我的数据库中所有绿色和小型的产品。这个列表是ProductFinder类中的 self.products。在我的__init__.py我添加了以下行:

在 products.py 我有:

根据 context.products 中的内容,虽然我想渲染一个不同的 mako。在 Pylons 中,我会做类似的事情:

那么如何根据上下文的内容呈现不同的模板呢?

0 投票
1 回答
1657 浏览

python - 如何使用 Deform 和 Colander 使文件上传兼任?

我想渲染一个包含一系列文件的表单,代表产品的不同图像。提供文件应该是临时性的,因此即使没有文件,表单也应该验证。我怎样才能做到这一点 ?

这是我使用的滤锅模式:

我试图添加一个“缺失”的论点,例如:

我想我得到一些有用的东西

但我真的不确定这是正确的方法......

谢谢 !

0 投票
2 回答
2052 浏览

python - Pyramid 中基于动态用户的授权

我正在遵循Pyramid 文档中的安全指南以及 wiki 教程添加授权

现在我需要添加基于单个用户而不是组的限制。

比方说,如果任何博客编辑都有权查看所有评论,那么只有帖子作者可以编辑帖子本身

对于我的根 ACL 中的第一个任务,如下所示:

但是为什么edit_post

我已经阅读了这个答案,但由于我不需要构建资源树,因此对我的需求来说似乎有点过分了。

0 投票
0 回答
788 浏览

python - Python pyramid_simpleform 如何处理关系?

在 Pylons 1 中使用过形式化学之后,我正在使用pyramid_simpleform迈出第一步。

我开始使用的表单非常简单:我有一些选项,用户必须检查一个。

这里的表单类:

这是视图中的实例:

比方说model.id_opt == 3

在这里,我为模板option中的每个单选按钮:model

我期望看到的是checked="checked"这样id_opt == 3的:

但我没有。

我必须自己设置检查选项吗?