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