python – SQLAlchemy和Pyramid,如何从上下文中获取资源?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – SQLAlchemy和Pyramid,如何从上下文中获取资源?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2107字,纯文字阅读大概需要4分钟。
内容图文
![python – SQLAlchemy和Pyramid,如何从上下文中获取资源?](/upload/InfoBanner/zyjiaocheng/911/a3e383525fb4491a9257f25cdd4a5892.jpg)
我在Pyramid Web应用程序中缠绕问题时遇到了问题.我的结构非常类似于Michael Merickel here描述的结构,除了我使用纯粹的遍历来查找我的观点. (它们被声明配置了context =’path.toResource’name =’myView’),相当标准的票价根据我从traversal wiki tutorial.我可以告诉我的应用程序有一个更复杂的URL结构虽然:我的用户资源在/ users / {user_id}和我的项目在/ projects / {project_id}下.我的所有资源都使用SQLAlchemy ORM保留;我有一个带有__name__和__parent__属性的User和Project类,以及扩展Columns的其他属性.
class User(Base):
id = Column(...)
__name__ = None
__parent__ = None
Class Project(Base):
id = Column(...)
__name__ = None
__parent__ = None
owner_id = Column(...ForeignKey(User.id))
owner = relationship(User,...)
我有一个RootFactory,ProjectFactory和UserFactory,它们在__get_item__调用中填充了相应的__name__和__parent__属性.
因此,在Project上下文的视图函数中,我在request.context中获得了一个Project实例.我的问题是如何引用相应的用户实例?我不能做project.owner,因为User实例没有通过RootFactory链,所以它的__parent__和__name__值未设置.这很糟糕,因为我想使用request.resource_url来查找所有者User的URL,所以我可以在视图页面上放置一个链接.
这是什么解决方案?我是否通过request.root完成所有工作?如果我想创建一个返回User或Project实例的复杂查询,该怎么办?是否有某种CrapFactory我可以传递SQLAlchemy所以它的所有实例都能正确填充?
我的做法完全错了吗?
如果我坚持使用URL路由,我觉得我不会遇到这些问题……
解决方法:
这是每个人在尝试将SQLAlchemy与遍历混合时遇到的问题.遍历的要求是具有持久树结构,您可以遍历该结构以从一个节点到另一个节点.
你基本上有2个选择.
>您可以在数据库中构建一个实际的树,其中每个资源都知道它所在的位置.因此,当您加载资源时,它可以通过某种方式确定其父级和名称.这是最好的选择.这通常通过在数据库中创建自引用资源表来完成.然后,您的User和Project对象都将具有resource_id外键,可以使用这些外键来确定它们在树中的位置.
>您的名称和父级当前仅在从根遍历树时填充,因此您可以通过request.root执行所有操作,以便引用树的其他部分.
也可以在每个资源上定义一个__resource_url__属性,但对于大多数情况来说这也是相当hackish.
要带走的是,与“我的网址具有此结构”并实际构建您可以使用的结构的持久层次结构存在很大差异.对于处理URL来说,它非常简单,但是为了生成它们,没有持久树就会很痛苦.
内容总结
以上是互联网集市为您收集整理的python – SQLAlchemy和Pyramid,如何从上下文中获取资源?全部内容,希望文章能够帮你解决python – SQLAlchemy和Pyramid,如何从上下文中获取资源?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。