理解Python web开发,轻松搭建web app!_惠州计算机Python培训学校
作者:黄君发布时间:2021-05-23分类:计算机学校浏览:779
下文意在对一个web开发做一个梳理。
我们打开浏览器输入一个网址 yukunweb.com,然后就看到了浏览器给我们显示的页面,这个时候打开浏览器开发者工具,点击 Network,刷新页面,会看到下方的请求的 url,点击 Response,就可以看到服务器返回给浏览器的 html文件信息了。如果复制 Response响应的内容,保存为 index.html并且在浏览器打开,依然可以看到首页的内容,但是似乎缺少了一些页面的样式和功能。
这是因为当浏览器接收到首页的 HTML源码后,它会根据 HTML的规则去显示页面,然后再根据 HTML里的链接,自动发送HTTP请求给服务器,拿到相应的图片,和 JavaScript、 CSS等资源,最终显示出一个完整的页面。所以我们会在 Network下面能看到很多额外的以 .js, .css等后缀的请求了。
其实我们看到的页面就是浏览器按照 HTML的规则,展示给我们的。 HTML告诉浏览器那里是导航,那里是主栏,那里是侧栏。而这些信息如何显示,或者是显示的样式,就是 CSS文件的功劳。至于比如导航的下拉隐藏上拉显示就是 JavaScript的作用。
如果想要做Web开发,就一定得熟悉 HTML、 CSS、 JavaScript三剑客的知识,这里推荐W3school的前端教程,也是我学习前端的地方:W3school
客户端和服务器通信
理解了前段三剑客,就知道如何去写一个网页。那么从我们在浏览器的地址栏输入 URL,到 Web页面呈现出来到底经历了什么。
一般这种通过发送请求获取服务器资源的Web浏览器,都可以称为客户端(client)。首先发送一个请求(request)给服务器,大多是以GET请求方式访问,服务器接收到你的请求,然后取到请求的资源,返回给客户端。
服务器和客户端之间交流是怎么进行的呢,服务器是怎么理解客户端的请求的呢。这里就需要一种协议规范,就是HTTP(HyperText Transfer Protocol,超文本传输协议)。可以说, Web是建立在 HTTP协议上通信的。
仍然是之前的例子,打开浏览器访问 yukunweb.com,打开浏览器开发者工具,点击图中标记的选项卡(记得点view parsed),可以看到客户端发给服务器的请求头前两行。
GET / HTTP/1.1
Host: www.yukunweb.com
第一行开头的GET表示请求访问服务器的类型,称为方法(method)。随后的字符 /指明了请求访问的资源对象,即请求URI。最后的 HTTP/1.1,即HTTP的版本号,用来提示客户端使用的 HTTP协议功能。
综上所述,第一行请求内容的意思是:请求访问某台 HTTP服务器上的 /(首页)页面资源。所以第二行的 Host表示请求的域名也就是服务器所在地址。
如果是 POST请求的话,不仅会有请求头部信息,还有一个 Form Data的请求实体内容。
接收到请求的服务器呢,他会将请求内容的处理结果以响应的形式返回,看图中的第一行:
开头的部分仍然是服务器对应的 HTTP版本,紧接着的 200 OK表示请求的处理结果的状态码 (status code) 和原因短语。 200状态码就表示响应成功,常见的 404表示访问错误, 500表示服务器响应错误。这里的 OK是没有固定的规则的,你也可以让他返回 GOOD啥的。
下一行是服务器信息,本站用的是 Nginx服务器,在下一行显示了创建响应的日期时间。在下一行的 Content-Type表示内容的类型,客户端会依赖他判断响应的内容是网页还是音频,图片等类型。
这里只是简单的介绍了 HTTP协议,即是客户端与服务器之间的通信协议。如果想要深入了解推荐阅读《HTTP权威指南》。
WSGI
如果你浏览一个地址 http://www.yukunweb.com/search-result/?keywords=音乐,你会访问到本站的音乐关键词的搜索结果。我们知道客户端发送请求给服务器,那么服务器是怎么拿到资源的呢。其实这是交给后端运行的应用返回的,好比你抓取一个页面到获取到信息,这些逻辑的处理肯定是我们的程序再跑。
但是,接收并且解析客户端的 HTTP请求在发送 HTTP响应这些底层操作,后端的程序肯定是不会去处理的。所以,要想只专注于Web业务逻辑,还需要一个服务器和 web应用之间的嫁接层————WSGI。
什么是WSGI(Web Server Gateway Interface)?
WSGI翻译过来就是Web服务器网关接口。他只是一个规范,定义了 Web服务器如何与 Python应用程序进行交互,使得使用 Python写的 Web应用程序可以和Web服务器(nginx/apache)对接起来。
该规范的地址:PEP 333
WSGI是 Python的Web开发的基石,有了它你就有了一切,它存在的目的有两个:
描述 Web 服务器如何与 Web 应用程序交互(将客户端请求传给应用程序),
描述 Web 应用程序如何处理请求和如何返回数据给服务器。
由于 Python内置的标准库里有一个 WSGI库 wsgiref,我们基于他来写一个体现 WSGI目的的例子:
from wsgiref.simple_server import make_server
def application(environ, start_response):
status = '200 OK'
response_headers = [('Content-type', 'text/html')]
start_response(status, response_headers)
body = 'Hello, {name} !!!'.format(name=environ['PATH_INFO'][1:] or 'WSGI')
return [body.encode('utf-8')]
app = make_server('', 8000, application)
app.serve_forever()
运行程序,如果没有报错,此时打开浏览器输入地址 127.0.0.1:8000和 127.0.0.1:8000/GuTianle,就可以看到程序返回的页面了。
我们可以看到一个请求,他的入口只需要一个 WSGI的处理函数。因为所有的请求信息都包含在 environ中,这样我们就可以根据这些信息去返回不同的数据。
参数:
environ:字典类型,存放了所有和客户端相关的信息。如果想知道他里面有哪些参数,可以更改上面的代码在 return 行上面加一个 for k, v in environ.items()的循环,打印出字典里的所有参数。
startresponse:一个可调用对象,接收两个必选参数和一个可选参数:
status: 一个字符串,表示 HTTP 响应状态字符串,如 200,404
responseheaders: 一个列表,包含有如下形式的元组:(headername, headervalue),用来表示 HTTP 响应的 headers ,如('Content-type', 'text/html')
exc_info(可选): 用于出错时,服务器需要返回给浏览器的信息
返回:一个可迭代对象, 服务器通过遍历这个可迭代对象可以获得body的全部内容,内容可以是 html也可以是 json。
这里简单的介绍了 WSGI是什么,干什么。如果理解了 WSGI,那么写一个 Python的Web框架就很简单了。这也是为什么 Python有成百上千web框架的原因。
实现基于WSGI的框架
上面我们理解了 WSGI是干什么的,那么我们基于它实现一个简单的 web框架可以说轻而易举了。
from wsgiref.simple_server import make_server
class Application(object):
def __init__(self, environ, start_response):
self.start_response = start_response
self.path = environ['PATH_INFO']
def __iter__(self):
if self.path == '/':
status = '200 OK'
response_headers = [('Content-type', 'text/html')]
self.start_response(status, esponse_headers)
yield 'Hello,World!'.encode('utf-8')
elif self.path == '/wsgi':
status = '200 OK'
response_headers = [('Content-type', 'text/html')]
self.start_response(status, response_headers)
yield 'Hello,WSGI!'.encode('utf-8')
else:
status = '404 NOT FOUND'
response_headers = [('Content-type', 'text/html')]
self.start_response(status, response_headers)
yield '404 NOT FOUND'.encode('utf-8')
if __name__ == "__main__":
app = make_server('127.0.0.1', 8000, Application)
print('Serving HTTP on port 8000...')
app.serve_forever()
这个 Application类只不过是对 WSGI又做了一层简单的封装而已,由于上面说过 WSGI函数返回的是一个可以迭代对象,所以需要实现一个iter方法,里面控制了客户端的请求路由并且返回不同的输出。
当然如果你想扩展成一个像样的框架还需要考虑很多,比如像 flask那样方便的路由系统,还有对于用户请求方式的处理等等。总之是个很需要折腾的过程,好比 flask的0.1版本去掉注释也就 200 多行,而如今最新版本。
点击咨询直接了解更多相关资料,我在惠州北大青鸟新方舟等你。
本文内容转载自网络,版权归原作者所有,如有侵权请联系我们进行删除。
标签:惠州计算机软件培训惠州计算件软件开发惠州计算机软件基础惠州计算机Python软件开发惠州Python培训学校惠州Python培训python基础教程python是什么python教程python入门
- 计算机学校排行
- 标签列表
-
- Java (3694)
- 北大青鸟 (3713)
- 软件开发 (3613)
- JAVA (3413)
- UI设计入门 (2093)
- 惠州北大青鸟 (4375)
- 惠州IT培训 (2558)
- UI设计培训 (2090)
- 惠州UI设计培训 (2095)
- 惠州UI设计培训学校 (2090)
- 惠州计算机软件培训 (6260)
- 惠州计算件软件开发 (6260)
- 惠州计算机软件基础 (6261)
- 惠州计算机JAVA培训 (3574)
- 惠州计算机Java软件开发 (3620)
- 惠州计算机JAVA软件开发 (4645)
- 惠州计算机JAVA软件开发学校 (3338)
- 惠州计算机Java软件开发培训 (3338)
- 北大青鸟IT计算机学校 (5048)
- 北大青鸟IT软件学校 (5062)
- 北大青鸟IT学校 (5059)
- 惠州计算机UI设计软件开发 (2088)
- UI设计基础教程 (2088)
- UI设计是什么 (2088)
- UI设计教程 (2088)
- 网站分类
-
- 计算机教程
- 计算机入门
- 职业学校
- 新闻动态
- 专业课程
- 热门技术
- SEO
- 培训教程
- windows
- linux教程
- 系统集成
- 网站开发
- Html5
- 办公软件
- 师资力量
- 热点问答
- 联系我们
- 计算机学校
- 惠州计算机学校
- 河源计算机学校
- 广州计算机学校
- 深圳计算机学校
- 湛江计算机学校
- 佛山计算机学校
- IT计算机培训信息
- 设计专业
- UI
- 影视特效
- 游戏动漫设计
- Photoshop
- AI设计
- 软件教程
- Java技术
- C语言/C++语言培训
- C#
- Python技术
- PHP
- 数据库
- SQL Server
- 网络教程
- 网络安全
- 网络营销
- 软件专业
- 大数据专业
- 前端开发专业
- 软件测试专业
- Python专业
- 软件实施
- 珠海计算机学校
- 初中生学什么好
- 计算机认证
- 文章归档
-
- 2024年11月 (14)
- 2024年10月 (32)
- 2024年9月 (29)
- 2024年8月 (68)
- 2024年7月 (59)
- 2024年6月 (43)
- 2024年5月 (48)
- 2024年4月 (80)
- 2024年3月 (65)
- 2024年2月 (54)
- 2024年1月 (25)
- 2023年12月 (12)
- 2023年11月 (73)
- 2023年10月 (134)
- 2023年9月 (34)
- 2023年8月 (3)
- 2023年7月 (3)
- 2023年6月 (12)
- 2023年5月 (30)
- 2023年4月 (72)
- 2023年3月 (11)
- 2023年2月 (34)
- 2023年1月 (37)
- 2022年12月 (78)
- 2022年11月 (359)
- 2022年6月 (1193)
- 2022年5月 (570)
- 2022年4月 (1567)
- 2022年3月 (982)
- 2022年2月 (54)
- 2022年1月 (182)
- 2021年9月 (308)
- 2021年8月 (1704)
- 2021年7月 (2423)
- 2021年6月 (1806)
- 2021年5月 (1569)
- 2021年4月 (1380)
- 2021年3月 (1255)
- 2021年2月 (709)
- 2021年1月 (1521)
- 2020年12月 (3626)
- 2020年11月 (1646)
- 2020年10月 (1046)
- 2020年9月 (592)
- 最近发表
-
- 清远信息:2024年广清杯清远南粤家政技能大赛举行决赛|||计算机培训机构
- 汕尾信息:陈良川带队到汕尾技师学院调研|||计算机职业技能培训班
- 东莞信息:凤岗凤岗镇组织召开社保参保缴费及劳动用工政策宣讲会|||计算机软件培训学校
- 阳江信息:2024年度注册城乡规划师职业资格考试的合格标准是怎样的?|||计算机软件培训学校
- 阳江信息:职业技能提升补贴对象有哪些?|||大学生计算机培训学校
- 清远信息:清远市首家社保服务合作网点在清城区举办启动仪式|||计算机职业技能培训班
- 汕头信息:招聘658名中高端人才!2024年汕头市引进中高端人才专场招聘会举行|||北大青鸟计算机培训中心
- 东莞信息:广东省社保智能经办现场会在东莞召开|||大学生计算机培训学校
- 东莞信息:东坑镇举办2024年重点群体系列招聘活动|||计算机职业技能培训班
- 东莞信息:万江万江街道成功举办第四届粤菜师傅烹饪技能竞赛|||广州计算机编程培训