菜单、json响应或类似的插件结构。

betahaus.viewcomponent的Python项目详细描述


betahaus.viewcomponent自述文件

web页面中可重用的组件使它们变得更加有趣和值得编写。 这个包的目标是使它们易于添加、删除和更改。 虽然它可以在普通的webapp中使用,但使用它可能更有趣 其他人会扩展或改变的东西,如框架。

它的目的是灵活、易于适应,而不是成为解决一切问题的完美方案。

另一个例子-构建菜单

所以你有一个网络应用,你想要一个菜单在某处。然后包X,Y和Z 作为插件工作,但他们如何添加到你的菜单? (阅读金字塔文档了解如何创建视图)

首先,让我们创建最小的python视图代码:

frombetahaus.viewcomponentimportrender_view_groupfrompyramid.viewimportview_config@view_config(renderer='some/template.pt')defmain_template(context,request):returndict(render_view_group=render_view_group)

然后模板:

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

菜单将是简单的html字符串,每个语句都有一个 <;li>; 。 要归还它们,我们需要修饰的方法。请注意,视图组 菜单 将在填充后立即创建。(decorator中的第一个参数)

frombetahaus.viewcomponentimportview_action@view_action('menu','login')deflogin_link(context,request,va):return'<li><a href="/login">Login</a></li>'@view_action('menu','logout')deflogout_link(context,request,va):return'<li><a href="/logout">Logout</a></li>'@view_action('menu','my_personal_stuff',permission='ViewStuff')defpersonal_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响应。

我们的上下文将是一个模拟用户对象,其中 字段将被视为敏感信息。

classUser(object):userid=""email=""#etc...

首先,为userid和email添加两个视图操作。电子邮件将获得许可 显示机密

frombetahaus.viewcomponentimportview_action@view_action('json','userid')defget_userid(context,request,va,**kw):returngetattr(context,'userid','')@view_action('json','email',permission='Show secret')defget_email(context,request,va,**kw):returngetattr(context,'email','')

其次,让我们注册一个常规视图,它将返回视图组json

frombetahaus.viewcomponentimportview_action@view_action('stuff','logo')deflogo_tag(context,request,va):return'<img src="img.png" />'
0

只有当用户/事物请求查看时,才会包括电子邮件 具有"显示机密"权限。 as_type 参数将视图结果呈现为dict,其中键 将是视图操作名称。(本例中为用户和电子邮件) empty_val 指定返回的任何none或空字符串都应替换为此值。 因此,即使userid返回"",该值仍将包括在内。

附加:垫片

当视图操作输出作为字符串连接时,将添加间隔符, 默认行为。这和使用spacer.join([view1,view2,etc])是一样的

奖励:优先级

priority参数设置添加视图操作时的顺序。 优先级是按顺序排列的,因此在20之前调用10。

要求

此软件包目前无法在金字塔之外使用,但它可能是 更改为更通用,只需要基本的zope组件架构。 它还取决于金星,金星将被金字塔抓取。

反馈和功能

这个包的源代码非常小,应该有足够的注释,所以 很容易知道该怎么做。该软件包仍在开发中,但用于 今天的生产服务器。

如果你有建议,批评,反馈,想法-请不要犹豫与我联系 或者在github中添加一个 问题

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
相当于加密流。NET在Java 安卓中的应用?   java Android:加载片段时启动动画   java文件从指定的绝对路径上载到服务器   java是否可以自定义Spring缓存抽象所使用的序列化?   当客户端输入为无效字符串时,java从JAXWS接收空的BigDecimal   将数据库从MySQL更改为SQLite后出现Java项目错误   java PrimeFaces在datatable中自定义行编辑器   java在数组中对字符串和双类类型进行排序   图像Java:如何在GridLayout中嵌套JPanel?   java searchByEmail方法不起作用   java运行时。exec(字符串)限制字符串   java通过异步运行lambda访问方法参数   java为什么这个条件语句不编译?   在javajar中添加和使用文件,就像它们在文件夹中一样   使用java查找带有正则表达式的子字符串   在awt所在的地方荡秋千。属性,以及如何在Java插件中提供它的本地化版本