使用python构建静态网站之一:绪言

欢迎大家来到《使用python构建静态网站》系列的第一讲,在这个系列里,我们会从头开始一步一步教大家如何使用python构建一个静态网站。这个系列教程的定位是为python语言的初学者或者对构建静态网站感兴趣的同学一个入门性的教程,如果您是一位python语言资深使用者或者对构建网站的相关内容非常了解,这个教程可能不太适合您。作为初学者,可以在这个教程中学习一些python语言的基本用法,更重要的是可以通过构建网站的过程把学与做结合起来,加深自己对语言各种特性的理解。此外,网络编程作为python语言的一个重要应用领域,通过学习使用python构建静态网站,也可以加深对这个领域的了解,为之后使用python作为后端语言构建动态网站打下基础。在第一讲,我们首先会介绍一些基础知识和背景,首先让我们来看一下什么是静态网站,以及为什么要构建静态网站。

静态网站是一个相对的概念,实际上在最初互联网刚刚出现时,所有的网站都是静态网站。程序员使用HTML语言制作一个个网页,然后上传到服务器上,网页之间使用超链接连接起来,形成了最开始的网站。那时候的网页都非常简单,很多时候只是做单纯的信息展示,网站的访问者从阅读网页获取信息,仅此而言。之后又出现了CSS,可以对网页内容进行布局和美化,又出现了FLASH,网页上出现了动画,网页由此变得更加美观和生动。但是,此时的网站仍然属于静态网站,它的突出特点简单来说就是当用户访问网站时,服务器把预先生成的HTML文件返回给访问者,整个访问过程就结束了。可以看出来,在这种模式下,由于网页是提前生成的,很难做到实时更新;同时,访问者只是单纯阅读网页上的信息,不存在向网站提供数据的过程,只是信息流向是完全单向的。随着科技的发展,这种静态网站架构的局限性逐渐显现出来,由于不能实时更新,对于那些信息及时性要求高的网站就不太适用了;同时,随着网页越来越多,信息量越来越大,制作和维护网站的工作量大大提升;和用户的交互性很差,网站除了向用户提供信息外很难有其它功能。

正是因为静态网站的以上局限性,动态网站技术应运而生。所谓动态网站,和静态网站最大的区别是有数据库技术的支持,网站服务器上没有预先生成的网页文件,而是当用户特定网址时,服务器再向数据库进行查询,把相应的数据返回并填充到网页中提供给用户。相比于静态网站,动态网站多了数据库查询、生成网页等步骤,技术架构自然更复杂,服务器开销也更高。但它的好处是网页是动态生成的,可以实现实时更新,同时也可以降低网站维持的工作量;同时,因为有服务器后端语言的支持,可以实现和用户的交互,用户可以实现提交表单、网站搜索等多种多样的功能,网站可以做的事情也更多了。事实上,大家每天最常访问的网站基本上都是动态网站,比如搜索引擎、电商网站等等,都存在着用户和网站之间的互动。

既然动态网站相对于静态网站有这些优势,那我们为什么还要学习构建静态网站了?这主要是因为两种架构各有自己比较适用的范围,在一些领域,静态网站架构反而更有优势。为了说明这些优势,我们还是先看一看动态网站架构有哪些局限性?第一,动态网站都需要在服务器上部署相应的后端语言运行环境,对建站和运维以及数据库管理的技术提出了更高的要求;第二,动态网站架构需要实时查询数据库,因此对服务器配置的要求要比静态网站高很多,为了服务同样多的用户,动态网站需要更大的服务器开销;第三,动态网站中的网页多是实时生成的,所以对搜索引擎的爬虫不太友好,不利于搜索引擎搜录,这对那些比较看重搜索引擎优化的网站比较不利。第四,动态网站相对于静态网站有更多的安全隐患,有不良企图的人可以使用多种技术轻松使得网站瘫痪,或者获得数据库的访问权限,造成数据泄露或丢失。

上面提到的这些动态网站技术的局限性,恰恰是静态网站可以发挥作用的地方。首先,静态网站上的网页都是预先生成的,用户访问特定网址就提供特定网页,对服务器性能要求很低,同时你不需要在服务器端进行后端语言环境配置,一个简单的服务器程序如nginx或者caddy就可以实现静态网站的所有功能;其次,由于没有数据库查询的过程,静态网站网页加载的速度会更快,用户体验会更好;第三,静态网站上都是静态的网页,对搜索引擎爬虫非常友好,有利于搜索引擎收录和优化;第四,静态网站没有数据库和后端语言环境,安全隐患更少,更不容易遭受攻击造成网站停止服务。

基于前面提到的静态网站建构相对于动态网站的优势,我们可以分析下静态网站比较适合那些类型的网站:这些网站的信息更新不是特别频繁,可能几天、几周甚至几个月才更新一次;这些网站主要是为了提供信息服务,不太需要和用户进行互动;网站建设者对服务器运维及后端语言不太了解或者不感兴趣,想把主要精力放在内容建设上面;网站的搜索引擎优化非常重要,直接决定了网站提供的内容能否获得更多受众;网站的访问速度要尽可能的快,这样才能增加用户访问页面的数量和停留的时间。综合上面的这些特点,我们应该可以看出静态网站架构比较适合那些类型的网站了。最明显的便是个人博客或者一些公司进行对外宣传的官方网站,这些网站的特点就是更新频率低;主要做信息展示,无需用户互动;网站建设并非专家,重点在于内容建设;搜索引擎优化非常重要,直接决定了网站是否可以实现其功能;访问速度这些网站用户体验最重要的组成部分等等。正是因为静态网站本身的技术特点和特定的用户需求的结合,静态网站架构在沉寂了多年之后又重新变得流行,很多人在搭建博客,很多公司在建设官网都在考虑是否应该采用静态网站的架构。

除开上面提到的原因以外,推动静态网站架构重新流行另外一个重要因素是静态网站生成器的出现。前面说过,静态网站的一大缺陷就是手工维护大量的网页文件工作量很大,因而限制了静态网站的发展。如果能够解决这个问题,当我们要更新内容时,能够自动生成对应的网页文件以及和它相关联的网页文件,工作量就要小多了。2008年11月,GitHub创始人和前CEO Tom Preston-Werner发表了一篇博文,在这篇博文里他提出了静态网站生成器的概念,并且自己编写了第一个静态网站生成器Jekyll,通过Jekyll可以将markdown或textile文件通过模板引擎渲染的方式自动转化为特定的网页文件,大大降低了静态网站内容更新的工作量。同时,使用者可以以Git仓库的方式保存网站的历史记录,GitHub也顺势推出了GitHub Pages功能,使用者可以通过把本地仓库推送到云端的方式实现网站的上线和更新。自此开始,使用GitHub Pages搭建一个静态博客已经成为程序员们的规定动作,甚至在找工作写简历时可以附上相应的博客地址,方便公司了解你的技术背景和水平。

Jekyll是用Ruby语言写的,自它出现后,其它程序员借鉴它的思路,使用其它语言编写了很多静态网站生成器,Staticgen列举了其中一些,我们可以发现可供选择的静态网站生成器非常多,几种主流的编程语言都能找到一个甚至多个对应的静态网站生成器。按照STAR数量排名,Jekyll目前排名第二,使用go语言编写的Hugo排名第三,使用js编写的Hexo排名第五,而我们这篇教程的主角,使用python编写的pelican排名第十。这些静态网站生成器各有自己的特点,比如说Hugo的特点是部署简单,只需要下载官方的二进制文件就可以在本地运行了,不需要像Hexo或者Pelican那样需要本地部署环境;同时Hugo生成网页的程度也非常快。Hexo有相对比较完善的生态,部分主题可以做到开箱即用,如果你只是想尽快的搭建完网站进行内容建设而对技术细节不感兴趣,可以尝试一下Hexo。

然而,我们教程的主题是用python构建静态网站,所以任何不用python语言编写的静态网站生成器都只能排除了,而在所有用python语言编写的静态网站生成器中,Pelican无论是在STAR数量以及流行程度上都是排名最高的,所以我们理所当然以它为工具来学习构建静态网站。在下一节教程里,我们将具体介绍Pelican的安装和简单使用。