python 搭建web_使用Python搭建一个简单的Web框架

1

请求一个网页的步骤:

1. 向浏览器发送一个请求;

2. 服务器收到请求,查询对应的资源(也可能是动态生成),这里的资源通常就是一个HTML文档;

3. 服务器生成HTTP报文,前面的HTML文档就是报文的body部分;

4. 服务器把HTTP响应发送给浏览器;

5. 最后浏览器接收到HTTP响应,把HTTP的Body解析出来并展示在浏览器上。

49701aebf6a75f0fe3c2135d97324b18502c4c7c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

2

对于前端开发人员来说,我们每天做的事情就是准备一个HTML文档,而对于整个用户访问流程来说,剩下的工作都由服务器组件来完成,常用的Web服务器有:Apache、Nginx、IIS等。

为了保证不同的服务器都能够正常完成整个网页访问过程,它们需要遵循一个统一的接口,这个接口就是WSGI(Web Server Gateway Interface):通用网关接口。

Django就是基于WSGI开发的Web框架。

WSGI接口要求应用程序必须提供一个函数,这个函数可以处理HTTP响应。

我们先来看看Python的simple_server.py模块:

cca2552c56ee7b7fe8e71bc66ef4fcf5ef0d417c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

3

我们可以使用simple_server的make_server方法快速创建一个WSGI服务器,make_server的前3个参数需要我们给出来,分别是host:主机名,port:端口号, app:应用程序,host和port都很好理解,那么app是什么呢?其实app就是就是一个支持WSGI接口的函数,例如Django框架。这个函数包含两个参数,如:

2083a5d6e1d06de81b88e196ca93cee8b104ac7c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

4

看到这里你可能会说,我在写Django代码的时候并没有创建一个这样的函数啊?其实这正是框架的作用,Django已经为我们完成了这个步骤,如果你创建过Django应用,那么一定知道wsgi.py文件,在这里有一行代码:application = get_wsgi_application(),点击进去可以看到application就是一个WSGIHandler对象实例。

16d8f72abab84240e517a4a77ac595ee40c19e7c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

5

我们继续打开WSGIHandler,这时可以看到WSGIHandler实现了__call__方法,也就是说WSGIHandler可以像方法一样被调用,而这个方法就需要提供两个参数:environ, start_response。

f0848bee41c1b72739ba613b1a2ca5cadde8987c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

6

我们再回到simple_server模块,在这里simple_server为我们提供了一个app的简单示例:

5e615d715fdb36201bd3aa3aabc5260f89358d7c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

7

environ就是HTTP请求的全部header信息。

start_response方法接收两个参数:HTTP请求状态码;Header列表。

demo_app的返回值是一个包含HTML响应内容的列表。

了解以上信息之后,我们就可以开发一个自己的Web框架了:

首先要有自己的路由器:

8974c38a59de450722e85fc35e413a8ca708857c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

8

开发自己的demo_app:

a44e8afc508c9bce7411edc4d6dd884ce44afa7c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

9

Web服务的启动代码:

5c9c964ce54a2f275e064fb5e00192dd3240f47c.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

10

执行程序之后,我们就可以再浏览器中访问了:http://localhost:9000/home/

最后总结一下,Web开发框架其实就是对demo_app方法的扩展。

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值