金字塔CMS

w20e.pycms的Python项目详细描述


PYCMS现在只有傻瓜和书呆子才能创建自己的CMS。好哇!总之,这里是w20e.pycms。使用金字塔框架作为基础,
建立在优秀的旧zope(和一些plone)概念之上。cms是使用以下主要概念创建的:

*zodb作为数据库
*zcml作为配置/粘合语言
*small core
*可选组件(如搜索、目录、共享);只包括您喜欢的

cms是一个框架,而不是一个现成的应用程序。你需要做的是创建你自己的金字塔应用程序,使用cms作为基础。我们已经尝试了
使之尽可能简单:使用w20e.pycms.sitemaker(在github或pypi上找到
)获取应用程序的粘贴模板。运行
Paster创建应用程序,然后…



为什么?
---

为了飞行的意大利面怪兽们,又来了一杯cms?好吧,你知道这是怎么回事。你用了几年的plone,发现当你最喜欢的工具是锤子时,所有的问题都有很强的钉化倾向。然后金字塔出现了,为您提供了最好的plone(zodb、zope组件架构、zcml、chameleon等)来创建轻量级应用程序。那么您需要一个
所见即所得的页面…那你需要搜索…分享。然后你醒来时手里拿着一个基本的CMS。不妨分享一下,这样你就可以自己决定是否值得你花点时间。我是说,你不必使用它!

不管怎样,如果你喜欢…


给谁看…?
——

配置很快就是1990年,确信windows 95是有史以来最好的操作系统,或者更愿意使用火箭发射器来对付厨房里的害虫。另一方面,对于那些将fuckit.js列为有史以来最好的js库的人来说,享受terry pratchett,
love buildout en zcml,并认为啤酒不仅仅是早餐饮料。


features
--


你的网站,如果
你不是针对企业市场。如果你这样做了,就离开(去
plone.org网站)!

pycms为您提供:

*zodb用于存储数据
*blobstorage
*用户和组管理
*使用repoze.catalog(可选)搜索
*创建和维护页面
*一个易于扩展的新内容类型框架
*许多zcml配置
*基于(twitter)bootstrap的cms设计



Getting Started
----


项目,要求:

w20e.pycms


最简单的方法是使用我们的粘贴模板
pycms_项目。安装w20e.pycms.sitemaker包(从
github获取),大致如下:

cd<;env>;。/bin/激活
/bin/轻松安装w20e.pycms.sitemakerpycms_project<;package name>;

**设置)



其次,为你的东西创建一个buildout和virtualenv。为什么不使用
w20e.buildoutskel?使用easy_install和

/>
回答"项目名称"问题的"软件包名称",回答"类型"问题的"PYCMS"。
您现在有一堆构建文件,几乎可以运行您的应用程序了!

您很可能会考虑创建一个buildout-my.cfg,它扩展了buildout-base.cfg,并添加了一些开发路径,例如:

develop=
<;创建PYCMS应用程序的路径,以及setup.py所在的路径…>;

运行python bootstrap.py,然后使用配置文件构建。

现在是时候加速引擎了,看看发生了什么。像这样运行
应用程序(在buildout目录内):





如果
这完全是你的超级重复web应用的想法,那就好了!如果没有,请阅读…



-添加默认管理和公共css/js文件(如果需要):



-使用pycms zcml指令,包括您喜欢的任何其他css和js:

<;pycms:css
cssfile="your.css"
csstarget="public"
media="screen"
/>;

<;pycms:js
jsile="your.js"
jstarget="public"
/>;

-覆盖像favicon和robots.txt这样的资源:

<;asset
到_override="w20e.pycms:static/favicon.png"
使用"yourapp:static/favicon.png.png"
/>;

-很可能需要覆盖"content"宏,即调用来显示页面的
。为此,创建自己的pt文件,使其扩展"main.macros['master'],并让它填充"body"槽:

<;metal:define macro define macro="master"
metal:extend macro="main.macros['master']>;

<;html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en"
i18n:domain="w20e"
xmlns:tal="http://xml.zope.org/namespaces/tal"
>;

<;head/>;
<;body metal:fill slot="body">;
grommit早安……

<;metal:define slot define slot="content"/>;
<;/body>;
<;/html>;
<;/metal:define macro>;


并添加到configure.zcml中(始终假设您调用了宏
main.pt):

<;pycms:macro
name="body"
ptfile="yourpackage:templates/main.pt"
/>;




页面只是带有
文本的东西。没什么大不了的。您可能需要创建自己的内容类型,
操作等。幸运的是,这并不难做到。最好的方法是查看
现有代码…无论如何,这里有一些例子:



actions
----


当前使用的设置
主要使用"透视"或查看内容的方式。在
管理界面中,它们被呈现为"选项卡"。使用zcml配置操作。使用操作语句如下:

<;pycms:action
name="users"
target="./users"
category="perspective"
ctype="site"
/>;


ctype是一个可选筛选器。



content types
----

您可以使用:


<;pycms:ctype
name="your廑type廑id"
factory=".models.yourtype.yourtype"
subtype="someothertype,someeventhertype"
icon="/static/img/yourtype廑icon.png"
/>;向您的类型注册图标、


您的实际型号应该扩展
w20e.pycms.models.base.basecontent

w20e.pycms.models.base.basefolder。

您可以
创建一个描述您的模型的xml表单,或者如果您坚持让
做一些更像pythonic的事情,则可以通过编程方式创建您的表单。签出w20e.forms以获取详细信息。

一个简单的模型如下:


from w20e.pycms.model s.base import basecontent




Class somethingSimple(basecontent):

"实际上它更像一个‘对象’…"

def初始(self,content\u id,data=none):

basecontent.\uu初始(self,content\u id,数据)

def base_u id(self):

默认情况下,pycms在<;您的包
home>;/forms/<;content type>;.xml中查找文件,因此在本例中:

<;package home>;/forms/somethingsimple.xml

如果您想要完全不同的内容,请为提供表单的
内容类型配置适配器。工厂:

<;适配器
factory=".your.factory"
用于".your.content.type"
提供"w20e.forms.interfaces.iFormFactory"/>;

并确保它实际实现了iformactory,并且可以创建
表单(w20e.forms.interfaces.iform)。



natures
----


定义内容类型的另一种方法是定义"natures"。让我们面对现实:一个事件有什么特别之处?这真的只是一个有开始和结束日期和位置的页面,不是吗?新闻是什么?这不是很像一页吗?如果你同意,
请继续阅读……

这就是自然。您可以这样注册自然:

<;pycms:nature
name="event"
interface="w20e.pycms_events.interfaces.ievent"
/>;


这将使自然显示在"自然"下拉菜单中。现在
您可以这样离开它,也可以使用w20e.forms.interfaces.iformmodifier实现来修改
页的表单:

<;订阅服务器
for="w20e.pycms_events.interfaces.ievent"
factory="w20e.pycms_events.models.event.event"
提供"w20e.forms.interfaces.iformmodifier"
/>;


,并按照以下行创建一个类事件:

from zope.interface import implements
从w20e.forms.interfaces导入iform,iformmodifier
从w20e.forms.data.field导入field
从w20e.forms.model.fieldproperties导入fieldproperties
从w20e.forms.rendering.control导入input
从w20e.forms.rendering.group导入flowgroup


事件(对象):form.data.addfield(field("end"))
form.data.addfield(field("location"))

grp.addrenderable(input("start","start of event",
extra_classes="datetime",
bind="start"))
grp.addrenderable(输入("end","end of event",bind="end"))
grp.addrenderable(输入("location","location",bind="location"))

form.view.addrenderable(grp,pos=-1)


或者您认为应该添加到页面表单中的任何内容…



--


default robots.txt允许所有操作。根据您的喜欢…



search
----


是否要为您的网站启用搜索?

将此添加到您的configure.zcml中:

<;include package="w20e.pycms"file="search.zcml"/>;





----
是否要为站点启用搜索?

将其添加到您的configure.zcml中:

<;include package="w20e.pycms_sharing"/>;

这是设置依赖项(不要忘记运行构建):




settings
--


pycms.acl.force_new=true false
强制新版本的acl。所有安全数据都将丢失
pycms.catalog.force_new=true false
强制新版本的目录。您的所有条目都将丢失,但您可以运行reindex catalog,一切都会好起来…
pycms.admin用户=<;用户>;<;pwd>;
管理员用户和密码,如:pycms.admin用户=管理员:pipo
pycms.admin机密=<;somesecret>;
此机密可用作获取管理权限的url参数
明智地使用它!
pycms.minify_css=true false
缩小css。默认为false
pycms.minify_js=true false
minify js。默认值为False
pycms.logged_-in_redirect=<;url>;
pycms.rootClass=<;full dotted classname>;
默认值为w20e.pycms.models.site.site
pycms.rootTitle=<;string>;
默认为"欢迎"
pycms.from_addr
发送电子邮件为…
pycms.bcc_addr
也发送到bcc
pycms.after_add_redirect
成功添加后要去哪里
pycms.cancel_add_redirect
添加
pycms.after_del_u redirect
删除后的去向
pycms.tempregister.timout=<;int>;
删除临时对象前的最小秒数



<1.1.2a
----
*pycms内容类型的json表示
*升级jquery+jqueryui
*小补丁

>1.1.1a
----
*最初创建的对象将有一个临时状态,直到它们完成
*现在在基本视图类中添加宏,因此,更容易覆盖
*validation.js修复了引导类名

<1.0.2a
=
*最后我们有了一个严重的(?)许可证。还更新了一些元数据。

1.0.1a
==
*启用了通过基本视图呈现viewlet的调用

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

推荐PyPI第三方库


热门话题
java如何在收到spring mqtt集成中停止重复订阅保留的消息   java改造安卓在textview中显示数据   读取CSV Java时获取While循环中的最后一行数据   将Java程序转换为小程序的部署   java如何在不向Src添加文件的情况下将文件放入GitLab测试   java包含字节数组列表的方法   java十进制转换错误   eclipse是由java引起的。lang.ClassNotFoundException:org。springframework。js。资源ResourceServlet   继承Java向上与向下   java自动调整标签内容的大小   java从Android中的AlertDialog返回信息   java在声明按钮时仿真程序中出现错误   java编写刷新线程的最佳方法   Java初学者错误   java需要帮助重置JComboBox   java如何用Spring/MultipartFile捕获中断流   java是否可以在JUnit中设置被测试类的方法的返回值?