一个简单的python博客系统。

simpleblog的Python项目详细描述


SimpleBlog的体系结构

simpleblog的结构很简单(不,这不是有意的 作为一种幽默,它只是自然流露出来的方式)。那里 有五种核心对象类型:配置、博客、页面、容器, 和条目。配置允许您定义或自定义内部 代码的行为,以及所有其他对象都有一个引用 对它。其他对象类型分为一个简单的层次结构:

  • 博客包含一个或多个页面,以及可以 在配置文件的另一个文件中指定;默认值 文件名是 blog.yaml (或 blog.json )和 config.yaml (或 config.json ),但其他文件名可以在 命令行到 simpleblog run脚本–请参见下文;
  • 每一页都包含一个"源",可以是单个条目, 或容器;
  • 容器包含一个或多个条目,其中包含 普通;
  • 条目是实际内容。

需要注意的是,上面提到的是 对象实现,它是完全通用的。一切 具体的,比如有什么实际的"来源",哪些条目 容器等都是在扩展中定义的。 (严格地说,每个博客中都有一个默认容器, 它包含了所有的条目,每个博客都有一个 索引页,使用该容器作为其"源",再加上 每个条目的页面。但钍所有的 默认情况下是博客。当然,这本身就足以 有一个简单的博客,这是重点的一部分。)

模板

simpleblog使用python内置的字符串模板和格式 呈现条目和页面。博客示例说明了 基本原理。这是一个我没有的领域 我的待办事项清单上的任何项目;各种奇特的模板引擎 它们在高度动态的web应用程序中有其用途, 但对于一个简单的博客来说,在我看来,他们是极端的滥杀。 但任何不同意的人都可以使用扩展机制 希望使用他们最喜欢的模板引擎。

扩展名

扩展允许四个blog的几乎所有行为 对象类型-上面的所有内容,除了配置-要更改, 甚至允许添加新的行为。(我说"差不多" 只是因为我不能绝对肯定 所有的可能性;但那是我的目标。)这是用 很简单(是的,你会看到这个词经常出现……)但是 强大的机制。您编写的python模块包含 类的子类,并实现 所需的更改或添加行为,并将其名称添加到 配置文件中的扩展名列表。就这样。或 当然,您可以使用随附的扩展 SimpleBlog,如下所示。我把它们都用在我的博客上。他们 举例说明如何使用延伸机构。

(注意:严格地说,因为扩展名将被查找 作为python模块名,它们必须是有效的标识符, 这意味着它们不能包含连字符。但是, 简单日志 允许您在引用扩展名时使用连字符,如 呈现标记 扩展;它将连字符转换为 在查找模块名称之前加下划线。命令名 处理方式相同–请参见下文。)

  • 存档扩展插件为 在特定的时间段-年,月, 和/或天数,具体取决于配置设置–并添加 将每个容器的页面存档到博客。
  • categories 扩展允许您对条目进行分类 按类别,并为每个 类别。
  • 版权 扩展自动生成版权 基于博客条目的开始和结束年份的元数据。
  • feed扩展为您的博客索引生成feed 页。rss 2.0和atom提要都受支持。这个分机 还支持每个RFC 5005的存档源(这只适用于 因为rss规范似乎不支持atom提要 这可以限制联合企业的规模 通过存档旧条目来传送文件。
  • 折叠 扩展允许您的条目有"short" 可以出现在索引页中的版本,其中包含指向 显示整个条目(包括部分)的条目页 "折下")。
  • 分组扩展允许索引页上的条目 分组,以便组页眉和页脚可以出现在 除了条目本身。默认值是分组 按日期,与条目的默认排序一起 在所有容器中,按时间倒序排列;但是 可以通过配置设置进行更改(当然它们都应该 不断地改变)。
  • 索引扩展将索引页添加到您的博客中 按字母顺序(按标题)提供所有条目的链接, 按时间顺序或"键"(指分配给 每个条目)顺序。
  • links 扩展允许您将链接添加到上一个 以及博客容器中每个条目的下一个条目。通过 默认情况下,它只在单个条目页上执行此操作,但这可以 被配置;还有,页面上实际出现的链接 由你提供的模板控制ID.
  • 本地化扩展目前是实验性的;所有扩展都是 如果某些其他配置 设置已存在。更多的本地化功能是 在待办事项列表中;当前只使用 英语ascii文本。
  • 分页扩展允许拆分具有多个 进入多个页面。
  • quote 扩展添加所有url的引用版本 在博客的元数据中找到。我添加这个是因为我链接到 我的博客索引页的W3CHTML验证器,它需要 引用的url,这是避免键入 它们手工输入我的博客元数据。)
  • render markdown扩展允许输入源 使用标记语法的纯文本;扩展名 将其呈现为HTML。(没有任何扩展更改 呈现,simpleblog只使用未更改的条目源 作为其呈现的html。)有配置选项可指定 markdown的输出格式(默认为html 4)和 "漂亮地打印"输出。
  • 标记 扩展允许您将标记添加到条目中, 并为每个标记添加容器和索引页。这个分机 对条目元数据使用缓存机制(见下文)。
  • 时间戳扩展使用缓存机制 存储不可变的文件时间戳。(在没有任何延期的情况下, 条目的时间戳是其源的最后修改时间 文件,但这意味着如果对条目进行任何更改 一旦出版,它的时间戳就会改变,这可能会改变 在索引页中出现的位置。)
  • 时区 扩展使条目时间戳可以识别时区 (没有这个扩展,它们是"天真的" datetime 对象)。 时区名配置设置允许您显式声明 你的博客时区;否则你的系统是本地时区 将使用设置(但是,请注意 utc时间戳 配置设置可以强制时区为UTC;请参阅 更改日志)。此扩展需要 pytz 库。
  • 标题 扩展允许您为每个 条目的源文件中的条目。(在没有任何延期的情况下, 条目的标题与其相对文件名或url相同 路径,这可能不是你想要的。) 标题中有非常简单的斜体和粗体格式。

注意,在某些情况下,声明扩展的顺序 在你的配置文件中很重要。扩展的顺序 配置中列出的命令决定了它们的加载顺序, 决定了他们处理任何事情的顺序 他们正在处理的数据,显然会有不同 如果多个扩展处理相同的数据。你的案子 最可能遇到的是处理原始数据的扩展 输入源数据(标题 标记 ,以及 折叠 所有的扩展都可以,而且已知的工作顺序是 我刚刚给出的顺序),以及添加源代码的扩展 以新容器的形式(归档文件 类别 , 和需要知道所有 博客中的容器(链接的扩展名是关键, 并且需要在刚刚列出的那些之后加载。

条目元数据缓存

条目元数据通常用于将条目放入容器中 并正确地点菜。我很高兴能在没有 必须向文件系统请求有关个人的任何数据 条目,通过插入或打开并读取条目源 文件夹。simpleblog为条目元数据提供了缓存机制 让事情变得简单。只需在任何 属性,该属性表示要缓存的元数据,并提供 缓存应存储在其中的文件的名称。

< Div id="命令">

命令

以上这些都很好,但是为了实际使用它,你必须 有某种前端。simpleblog运行脚本提供 一。如果在没有任何命令的情况下运行,脚本只会将您 在python交互shell中,使用 simpleblog 包 加载;我发现这对于测试和调试非常有用。但是 通过类似的机制,还可以通过命令来增强脚本 延伸机构。

(注意:与扩展名一样,命令名中的连字符也会被转换 要在查找模块之前加下划线,以便使用连字符, 如下面所述,如果您发现它们像我一样更易于键入。)

  • publish 命令通过 ssh连接到将为其提供服务的远程主机。默认情况下,它使用 rsync 命令,但配置设置允许您更改 命令名(尽管它必须是一个使用相同 命令行语法为 rsync ,例如 scp )。你也可以 配置命令选项和ssh用户、远程主机名, 以及要发布到的远程主机上的路径。
  • 呈现静态 命令呈现所有 你博客中的页面。配置设置控制 文件将呈现到。对于我的博客来说,这已经足够了, 因为我把它作为静态文件发布。
  • 本地服务 命令为您静态呈现的博客提供服务 用于测试的本地主机。可以使用命令行选项更改 使用的主机名(或IP地址)和端口(默认为 本地主机 端口8000),例如允许在局域网上进行测试。 因为使用了内置的python simplehttpserver ,所以它是 而不是 建议尝试使用此服务将您的博客发送到Internet 命令。

有关使用的快速帮助,请使用SimpleBlog运行的 --help 选项 脚本。如果提供了命令名,则特定于该命令的帮助将 显示;否则,将显示一般帮助。

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

推荐PyPI第三方库


热门话题
java如何在Android上的可访问文件夹中创建文件?(非根)   tomcat Unix脚本未使用Process Runtime在Java中运行   模拟器中的java Android AudioTrack速度异常   java是否创建具有特定@ConditionalOnProperty的注释?   java如何使用json数据从gridview中的URL加载图像?(类别和子类别)   ConcurrentHashMap的java锁定值对象   如何在具有额外属性的Java枚举上执行Javadoc?   java如何修复SocketException连接重置问题?   无附加表的java JPA实体继承   java Android应用程序在启动屏幕后崩溃   java如何将Arraylist保存到文件?   java restTemplate从restfull Web服务获取文件数组   java活动带布局隐藏导航栏   socket未接收任何内容的java BufferedReader