设计

下面是我们的wiki应用程序设计的快速概述,帮助我们理解在本教程中我们将要做的更改。

总体

我们选择使用 reStructuredText wiki文本中的标记。从restructuredtext到html的转换是由广泛使用的 docutils Python模块。我们将把这个模块添加到项目的依赖项列表中。 setup.py 文件。

模型

名为的根资源 Wiki 将是wiki页面名称到页面资源的映射。页面资源将是 Page 类。它们存储文本内容。

类URL /PageName 将使用wiki遍历 [ PageName ] =页面。结果上下文是现有页面的页面资源。

要将页面添加到wiki,将创建页面资源的新实例。它的名称和引用将添加到wiki映射中。

一页名为 FrontPage 包含文本 这是头版 将在初始化存储时创建。它将用作wiki主页。

意见

将有三个视图来处理添加、编辑和查看wiki页面的正常操作,另外还有一个视图用于wiki首页。将使用两个模板,一个用于查看,一个用于添加和编辑wiki页面。

从1.5版起 Pyramid 不再提供模板系统。在本教程中,我们将使用 Chameleon . 变色龙是 ZPT ,这是一种基于XML的模板语言。

安全性

我们最终将为应用程序添加安全性。我们将用于此操作的组件如下。

  • 用户,字典映射 userids 对应的密码。

  • 组,字典映射 userids 到他们所属的组的列表。

  • groupfinder ,一个 授权回调 查找用户和组。它将在新的 security.py 文件。

  • ACL 连接到根 resource . 下面每一行详细说明 ACE

    行动

    校长

    许可

    允许

    每个人

    视图

    允许

    编辑组

    编辑

  • 权限声明被添加到视图中,以在处理每个请求时断言安全策略。

另外两个视图和一个模板将处理登录和注销任务。

总结

下表列出了与每个视图关联的URL、上下文、操作、模板和权限:

URL

视图

语境

行动

模板

许可

/

view_wiki

维基

重定向到/FrontPage

页面名

view_page [1]

显示现有页面 [2]

view.pt

看法

/PageName/edit_page

edit_page

显示包含现有内容的编辑表单。

如果表单已提交,请重定向到/pagename

edit.pt

编辑

/add_page/PageName

add_page

维基

创建页面 PageName 在存储中,显示没有内容的编辑表单。

如果表单已提交,请重定向到/pagename

edit.pt

编辑

/登录

登录

维基,禁止 [3]

显示登录窗体。

如果表单已提交,请进行身份验证。

  • 如果验证成功,请重定向到我们来自的页面。

  • 如果验证失败,则显示“登录失败”消息的登录表单。

login.pt

登出

注销

维基

重定向到/FrontPage