2.1 Socket编程
Socket也叫“套接字”,是计算机网络通信中最基础的内容,它通过对TCP/IP协议的封装提供了在不同主机之间进行通信的功能。当访问一个网站时,浏览器会打开一个套接字,通过套接字建立与服务器之间的链接,链接建立成功后服务器提供对访问的响应并返回访问内容,浏览器接收响应并显示。
几乎所有Web应用都是通过Socket实现的。一个网站本质上就是Socket服务端和客户端之间的通信,Web服务器就是服务端,用户浏览器就是客户端。用户访问网站的过程就是服务端与客户端Socket通信的过程,如下图所示。
下面的程序是一个简单的Socket Web服务器。运行程序,通过浏览器访问http://127.0.0.1:8000/,就会打开一个“Hello,World!”的页面。
浏览器访问效果如下图所示。
这就是所有网站的实现原理:接收HTTP请求,解析HTTP请求,发送HTTP响应。如果这些工作都由网站开发人员来做,那么开发人员不仅需要熟悉自身产品相关的技术,而且需要学习HTTP协议、TCP/IP协议等协议,这会带来很多额外的工作量。幸运的是,这些工作已经有人帮我们完成了,在Python中这个工作由WSGI接口实现,而Django是基于WSGI接口的。
当访问同一个网站时,如果输入的URL不同,网页显示的内容也不同,这就是一般Web框架所实现的。接下来开发一个可以根据用户输入URL的不同而显示不同页面信息的Web框架。这个框架暂时可以接收两个地址:index和detail,如果输入其他地址则返回404错误,具体代码如下:
执行脚本,然后分别访问index、detail和home页面(注意,在代码中并没有处理home请求),浏览器显示效果如下面三幅图所示。
可以看到,由于在这个Web框架中处理了index请求(if url == '/index':)和detail请求(elif url =='/detail'),因此访问这两个页面时网页能够正常显示;对于其他请求统一按照404的方式进行处理,访问home页面时抛出404页面。
虽然这个Web框架看起来非常简单,但是事实上很多开发框架都是这样在WSGI基础上开发的,只是不同的框架提供了不同的功能而已。如果你感兴趣,可以尝试自己开发一个Web框架。