用于菜单、JSON响应或类似的插件结构。
项目描述
betahaus.viewcomponent README
网页中的可重用组件让编写它们变得更加有趣和有意义。本包的目标是使它们易于添加、删除和更改。虽然它可以在常规网络应用程序中使用,但在其他扩展或更改的项目(如框架)中使用可能更有趣。
它被编写得灵活且易于适应,而不是成为解决所有问题的完美方案。
基本示例 - 添加一个标志
首先,创建一个返回HTML标签的方法。我们还需要装饰这个方法。va位置参数是一个ViewAction - 在这个示例中我们可以忽略它。
from betahaus.viewcomponent import view_action
@view_action('stuff', 'logo')
def logo_tag(context, request, va):
return '<img src="img.png" />'
当您运行 config.scan('your-apps-name') 并包含此代码时,它将创建一个名为“stuff”的ViewGroup,该组有一个名为“logo”的ViewAction。
您可以选择使用config对象的指令。在这种情况下,您需要包含 betahaus.viewcomponent。
#Code in your package
def logo_tag(context, request, va):
return '<img src="img.png" />'
def includeme(config):
config.add_view_action(logo_tag, 'stuff', 'logo')
ViewGroup是一个有序的字典-like工具,它跟踪ViewActions。
如果您想获取ViewGroup的结果,只需这样做
from betahaus.viewcomponent import render_view_group
render_view_group(context, request, 'stuff')
由于这个ViewGroup中没有其他内容,因此只会返回logo标签。
要仅获取单个ViewAction的结果,可以调用render_view_action
from betahaus.viewcomponent import render_view_action
render_view_action(context, request, 'stuff', 'logo')
高级示例 - 可插拔的json渲染器
用例:您从数据库中拉取JSON。一些信息是敏感的,并且只能对某些用户可见。其他插件希望能够在JSON响应中附加或更改信息。
我们的上下文将是一个模拟用户对象,其中电子邮件字段被视为敏感信息。
class User(object):
userid = ""
email = ""
#etc...
首先,为userid和email添加两个视图操作。电子邮件操作将具有显示秘密权限。
from betahaus.viewcomponent import view_action
@view_action('json', 'userid')
def get_userid(context, request, va, **kw):
return getattr(context, 'userid', '')
@view_action('json', 'email', permission = 'Show secret')
def get_email(context, request, va, **kw):
return getattr(context, 'email', '')
其次,让我们注册一个常规视图,该视图将返回视图组json。
from betahaus.viewcomponent import render_view_group
from pyramid.view import view_config
@view_config(context = 'User', renderer = 'json', name = 'user.json')
def user_view(context, request):
""" Render json."""
return render_view_group(context, request, 'json', as_type='dict', empty_val = '')
电子邮件现在只有在请求视图的用户/事物具有显示秘密权限的情况下才会包含。参数as_type将渲染视图结果为字典,其中键将是视图操作名称。(在这种情况下是user和email)empty_val指定任何None或空字符串返回值应替换为该值。因此,即使userid返回空字符串,该值也会包含在内。
附加功能:间隔符
当视图操作输出作为字符串连接时,将添加间隔符。它与执行spacer.join([view1, view2, 等])相同。
附加功能:优先级
优先级参数设置视图操作添加时的顺序。优先级按升序排序,因此10在20之前被调用。
需求
此包目前不能在Pyramid之外使用,但它可以被修改为更通用,并且仅需要基本Zope组件架构。它还依赖于venusian,该工具将被Pyramid获取。
反馈和功能
该包的源代码非常小,并且应该有足够的注释,以便轻松了解如何使用它。该包仍在开发中,但今天已在多个生产服务器上使用。
如果您有建议、批评、反馈或想法,请随时与我联系或添加GitHub上的问题。
鸣谢
Robin Harms Oredsson / robinharms(初始作者)
Parnell Springmeyer / ixmatus
Paul Bonser / pib
从Pyramid(《http://www.pylonsproject.org》)本身以及不同的repoze软件中借鉴了许多好的想法。代码本身是作为VoteIT项目(《http://www.voteit.se》)的一部分编写的。
变更
0.4.1 (2015-04-04)
添加:选项以返回字典、生成器或列表而不是仅连接字符串。
添加:连接语句的间隔符选项。
添加:配置指令“”add_view_action”“以附加视图操作而不扫描。
修复:替换ViewAction时导致新操作显示两次的问题。
错误修复:替换时,应保留顺序,除非设置优先级。
移除调试面板,因为代码已过时,并且无法与较新的pyramid_debugtoolbar版本一起使用
0.3.1b(2014-05-05)
Unicode 不被允许作为字符串类型…(给我的棕色纸袋)[robinharms]
0.3b(2014-03-19)
查看组不再捕获异常。这是在 Python 2 上产生大量奇怪错误消息的原因。
使用无效键的排序不会引发异常——它们将被记录为警告。
为视图操作添加了新的参数优先级。[ixmatus]
0.2b(2013-06-18)
Python3 支持由 pib(Paul Bonser)修复——非常感谢!
vas 的获取和执行已更改——应忽略空结果,现在不使用 yield。这应该会使错误消息更清晰。[robinharms]
包含性、接口、权限等检查已移动到 ViewAction 对象,因为这些检查如果没有直接调用对象则不会执行。[robinharms]
0.1b
初始版本
项目详情
betahaus.viewcomponent-0.4.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a64a1dee62f0c3aa3b1bbef18de44b40c798a095a7aee9988801180c32313d14 |
|
MD5 | 04ef8aa4d92091966a42fdf4f5f3cd68 |
|
BLAKE2b-256 | 3972727934b6f2512e8cdbe3478179fea8296a5fea00c313be6d9d6853154844 |