跳转到主要内容

用于菜单、JSON响应或类似的插件结构。

项目描述

https://travis-ci.org/robinharms/betahaus.viewcomponent.png?branch=master

betahaus.viewcomponent README

网页中的可重用组件让编写它们变得更加有趣和有意义。本包的目标是使它们易于添加、删除和更改。虽然它可以在常规网络应用程序中使用,但在其他扩展或更改的项目(如框架)中使用可能更有趣。

它被编写得灵活且易于适应,而不是成为解决所有问题的完美方案。

另一个例子 - 构建菜单

因此,您有一个web应用,并且想在某个地方添加一个菜单。然后X、Y和Z作为插件工作,但它们是如何添加到您的菜单中的?(阅读Pyramid文档了解如何创建视图)

首先,让我们创建最简单的Python视图代码

from betahaus.viewcomponent import render_view_group
from pyramid.view import view_config

@view_config(renderer = 'some/template.pt')
def main_template(context, request):
    return dict(render_view_group = render_view_group)

然后是模板

<html>
  <body>
    <ul>${render_view_group(context, request, 'menu')}</ul>
  </body>
</html>

菜单将很简单,是html字符串,每个语句一个<li>。为了返回它们,我们需要装饰方法。注意,一旦填充,ViewGroup menu 就会被创建。(装饰器的第一个参数)

from betahaus.viewcomponent import view_action


@view_action('menu', 'login')
def login_link(context, request, va):
    return '<li><a href="/login">Login</a></li>'

@view_action('menu', 'logout')
def logout_link(context, request, va):
    return '<li><a href="/logout">Logout</a></li>'

@view_action('menu', 'my_personal_stuff', permission = 'ViewStuff')
def personal_link(context, request, va):
    """ This will only render if user has permission 'ViewStuff'"""
    return '<li><a href="/my-stuff">My stuff</a></li>'

启动您的应用程序后,您现在将有一个菜单。其他应用程序也可以以相同的方式添加到其中,或者删除您的初始选项。

高级示例 - 可插拔的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 (13.3 kB 查看哈希

上传时间

支持者