Full Stack Python logo Full Stack Python

全部主题 | Blog | 时讯 | @fullstackpython | Facebook | 源码

静态网站生成器

静态网站生成器结合标记语言(如 Markdown 或 reStructuredText)以及模板引擎,如 Jinja, 来生成 HTML 文件。这些 HTML 文件可以通过 Web 服务器 或者 内容分发网络 (CDN) 进行部署发布,而无需依赖 WSGI 服务器 等其它东西。

为什么说静态网站生成器很有用?

静态内容文件 如 HTML、CSS 和 JavaScript 文件可以由内容分发网络 (CDN) 来提供服务,以实现高规模及低成本的目标。静态内容网站一旦遇到高并发流量,能很容易地通过 CDN 来提供服务而不会丢失连接。

例如,在Full Stack Python 网站被推到 Hacker News 首页 的那个周末,由于本网站是通过将 GitHub Pages 作为 CDN 来提供服务的,因此并发连接即便接近 400 个时也没有碰到任何问题,如下图所示,该图是在流量井喷期间截取的 Google Analytics 截图。

Example of how static websites scale with a CDN based on Full Stack Python on Hacker News front page traffic.

静态网站生成器是如何工作的?

静态网站生成器允许用户通过使用某种标识语言编写模板文件来创建 HTML 文件。然后静态网站生成器结合标记语言和模板文件来生成 HTML 文件。输出的 HTML 文件不需要手工维护,因为当标签或者模板每次被修改后,它都能重新被创建出来。

例如,如下图所示, Pelican 静态网站生成器能将 reStructuredText 文件和 Jinja2 模板文件作为输入,然后将它们组合并输出一组静态 HTML 文件。

Example of how static site generators work with a markup language and templates.

使用静态网站生成器的缺点是什么?

最大的缺点是: 代码无法在网站生成后执行。你只能使用这些输出文件,因此如果你习惯用传统的 Web 框架 创建 Web 应用的话,你得改变下你的期望。

那些需要数据库来实现的功能,如评论、会话及用户数据,只能通过第三方的服务来提供。例如,如果你想在一个静态网站上添加评论功能,你需要 嵌入 Disqus 的评论框,从而只能完全依赖他们提供的功能。

很多的 Web 应用都不能简单地通过静态网站生成器来生成。但是,静态网站生成器可以用来生成网站的部分内容,并通过 Web 服务器来部署,而网站的其它页面可以由 WSGI 服务器来处理。如果处理得当,这种类型的 Web 应用比那些全部页面都由 WSGI 服务器呈现的应用更具扩展潜力。其增加的复杂度对于你的特定应用来说,可能是值得的,也可能并不值得。

Python 的实现

存在很多用不同的语言实现的静态网站生成器。以下列出的这些主要都是用 Python 编写的。

  • Pelican (源代码) 是一个常用的 Python 静态网站生成器, Full Stack Python 网站就是用它创建的。它的主要模板引擎是 Jinja,并且在默认配置下就支持 Markdown、 reStructuredText 及 AsciiDoc。

  • MkDocs (源代码) 使用 YAML 配置文件,并能将 Markdown 文件和一个可选的主题作为输入来创建一个文档网站。它的模板引擎是 Jinja,但是用户通常不必创建自己的模板,除非该特定的网站真得需要,但是如果是这样的话,采用其它的静态网站生成器可能会更加合适。

  • Nikola (源代码) 支持 reStructuredText、 Markdown 及 Jupyter (IPython) Notebooks 等文件,它能将这些文件与 Mako 或 Jinja2 模板结合来创建静态网站。它同时兼容 Python 2.7 和 3.3。对 Python 2.7 的支持会一直到 2016 年年初,而 Python 3.3 会继续得到支持。

  • Acrylamid (源代码) 使用增量方式来生成静态网站,因此相比每次当输入文件被修改后都重新生成所有页面的生成方式,它处理的更快。

  • Hyde (源代码) 最初是作为 Ruby 流行的 静态网站生成器 Jekyll 的 Python 版本而开始开发的。今天的这个项目已经不是原来的 "Jekyll 克隆版" 了。Hyde 支持 Jinja 及其它的模板语言,它更加注重通过标记文件中的元数据来指示生成器如何产生输出文件。 通过浏览这些 使用了 Hyde 的网站 页面,可以看看用 Hyde 创建的实际网站示例。

  • Grow SDK (源代码) 使用工程(通过叫 pods ),工程中包含一个特殊文件和目录结构,来生成网站。该项目当前停留在 "试验“ 阶段。

  • Lektor (源代码) 是一个 Python 的静态内容管理系统,它可以部署到任何的 Web 服务器上。它的 模板引擎 采用 Jinja2

  • Complexity (源代码) 是一款为喜欢使用 HTML 的人准备的网站生成器。它使用 HTML 来创建模板,同时又从 Jinja 那继承了一些功能。它同时兼容 Python 2.6+、 3.3+ 和 PyPy。

  • Cactus (源代码) 使用 Django 模板引擎,该引擎在创建时就考虑了前端设计人员的需求。它同时兼容 Python 2.x 和 3.x。

开源 Python 静态网站生成器示例

静态网站生成器资源

静态网站部署相关资源

  • 在 AWS 上使用 S3 和 CloudFront 部署一个静态网站 上提供了一份非常不错的教程,并附有截图,讲解了任何类型的静态网站如何在 AWS 上使用 S3 和 Cloudfront 进行设置。

  • 使用 S3 和 Cloudflare 部署静态网站 讲解了如何设置 S3 存储段,并在前端配置 Cloudflare 作为 CDN,以通过 HTTPS 来提供内容服务。你应该可以使用 Amazon Cloudfront 来实现大致相同的设置,但是作为一个 Cloudflare 用户,我还是喜欢它们的这种静态网站配置服务。

  • Google Cloud 提供了一篇教程讲解了如何使用它们来 部署你的静态网站。值得注意的是你现在还无法在 Google 存储服务器上使用 HTTPS,这是一个很大的遗憾。

你还想学习 Python Web 开发的哪些知识?

我已经创建了一个 Python Web 应用,那我如何部署呢?

我想学习如何用框架创建 Python Web 应用。

什么是 Web 应用编程接口(APIs)?

#### 在这里注册以便每月能收到一份邮件资料,内容包含本站的主要更新、教程和 Python 书籍的打折码等。

The Full Stack Python Guide to Deployments 想找到一个完整的,一步一步的部署方案吗?请看《The Full Stack Python Guide to Deployments》.

邮件获取更新

##### 注册以便每月能收到一份邮件资料,内容包含本站的主要更新和 Python 教程。

目录

1. 简介学习编程为什么用 Python?Python 2 还是 3?企业 PythonPython CommunityBest Python Podcasts最佳 Python 资源最佳 Python 视频2. 开发环境VimEmacs3. 核心语言生成器推导式4. Web 开发Web 框架DjangoFlaskBottlePyramidMorepath其它 Web 框架Web 设计级联样式表 (CSS)JavaScriptWebSockets模板引擎Web 应用安全静态网站生成器Jinja25. 数据关系型数据库NoSQL 数据存储对象关系映射器PostgreSQLMySQLSQLite6. Web APIsAPI 集成API 的创建Twilio7. 部署服务器平台即服务(PaaS)操作系统Web 服务器WSGI 服务器源码控制应用程序依赖静态内容任务队列配置管理持续集成日志监控Web 分析Docker缓存微服务DevOpsNginxApache HTTP 服务器CaddyGreen Unicorn (Gunicorn)UbuntuPelicanLektorMkDocs8. 测试单元测试集成测试代码度量调试9. MetaBotsChange LogFuture DirectionsAbout the AuthorSQLAlchemyPeewee …或者显示全部目录内容.

静态网站生成器

重要的更新内容会通过 Twitter 账号@fullstackpython发布。


需要更加详细的教程吗?请看 《The Full Stack Python Guide to Deployments》。

Chapters

1. 简介2. 开发环境3. 核心语言4. Web 开发 » 静态网站生成器 5. 数据6. Web APIs7. 部署8. 测试9. Meta …or view the full table of contents.


This site is based on Matt Makai's project Full Stack Python, thanks for his excellent work!

此网站由 @haiiiiiyun开源爱好者们 共同维护。 若发现错误或想贡献,请访问: Github fullstackpython.cn 项目