如何才能做到学Python从入门到精通!而不是入门到放弃!攻略送你

如何才能做到学Python从入门到精通!而不是入门到放弃!攻略送你,第1张

概述<divstyle=\"margin:0px;padding:0px;border:0px;font-size:14px;line-height:inherit;font-family:helvetica,Arial,\'HiraginoSansGB\',\'MicrosoftYaHei\',simsun;vertical-align:baseline;color:rgb(89,8

<div ><div ><div ><div ><div ><div ><div ><p >

<p >

<p >你会发现,运行程序之后并且用浏览器访问 127.0.0.1:8001 ,程序会报错,浏览器显示“该网页无法正常运作”,如下图

<p >

<p >

<p >

<p >4. 释放连接TCP连接

<p >若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

<p >5. 客户端浏览器解析HTML内容

<p >客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

<p >

<p >

<p >http响应报文格式:

<p >

<p >

<p >

<p >这时候,在浏览器上面就可以看到正确的页面了,并且可以调出Chrome的开发者工具查看到我们传过来的http响应格式。

<p >

<p >

<p >根据不同的路径返回不同的内容

<p >细心的你可能会发现,现在无论我们输出什么样的路径,只要保持 IP 和端口号不变,浏览器页面显示的都是同样的内容,这不太符合我们日常的使用场景。

<p >如果我想根据不同的路径返回不同的内容,应该怎么办呢?

<p >这时候就需要我们把服务器收到的请求报文进行解析,读取到其中的访问路径。

<p >观察收到的http请求,会发现,它们的请求行、请求头部、请求数据是以 \r\n 进行分隔的,所以我们可以根据 \r\n 对收到的请求进行分隔,取出我们想要的访问路径。

<p >

<p >这时候,我们访问不同的路径,例如 http://127.0.0.1:8001/yimi/ http://127.0.0.1:8001/xiaohei/ 会在浏览器上显示不一样的内容

<p >

<p >

<p >

<p >可以看到,我们现在的程序逻辑不是很清晰,我们可以改一下,url 用一个列表存起来,url 对应的响应分别写成一个个函数,通过函数调用进行 url 访问,你会发现,这跟某个框架的处理方式很像很像(偷笑罒ω罒~~~)

<p >

<p >

<p >返回具体的 HTML 页面

<p >现在,你可能会在想,目前我们想要返回的内容是通过函数进行返回的,返回的都是一些简单地字节,如果我想要返回一个已经写好的精美的 HTML 页面应该怎么办呢?

<p >我们可以把写好的 HTML 页面以二进制的形式读取进来,返回给浏览器,浏览器再进行解析,这就可以啦!

<p >

<p >

<p >

<p >

<p >返回动态 HTML 页面

<p >这时候,你可能又会纳闷,现在返回的都是些静态的、固定的 HTML 页面,如果我想返回一个动态的 HTML 页面,应该怎么办?

<p >动态的网页,本质上都是字符串的替换,字符串替换发生服务端,替换完再返回给浏览器。

<p >这里,我们通过返回一个当前时间,来模拟动态 HTML 页面的返回过程。

<p >

<p >

<p >

<p >可以看到,现在我们每一次访问 yimi 页面,都会返回一个当前时间。

<p >

<p >

<p >小结一下

<p >1. web 框架的本质:

<p >socket 服务端 与 浏览器的通信

<p >2. socket 服务端功能划分:

<p >a. 负责与浏览器收发消息( socket 通信) --> wsgiref/uWsgi/gunicorn...

<p >b. 根据用户访问不同的路径执行不同的函数

<p >c. 从 HTML 读取出内容,并且完成字符串的替换 --> jinja2 (模板语言)

<p >3. Python 中 Web 框架的分类:

<p >1. 按上面三个功能划分:

<p >1. 框架自带 a,b,c --> Tornado

<p >2. 框架自带 b 和 c,使用第三方的 a --> <span >Django

<p >3. 框架自带 b,使用第三方的 a 和 c --> Flask

<p >2. 按另一个维度来划分:

<p >1. Django --> 大而全(你做一个网站能用到的它都有)

<p >2. 其他 --> Flask 轻量级

<p >

<p >

<p >你会发现,使用了 wsgiref 模块之后,程序封装更好了,代码逻辑也更加清晰了。

<p >

<p >

<p >

<p >

<p >下节预告

<p >到了这里,相信聪明的你已经理解清楚整个 浏览器 服务器的访问过程,并且 socket 服务端功能划分有了清晰的认知。

<p >

<p >欢迎大家关注我的公众号:Python学习交流

<p >欢迎大家加入千人交流答疑学习基地:125240963

总结

以上是内存溢出为你收集整理的如何才能做到学Python从入门精通!而不是入门到放弃!攻略送你全部内容,希望文章能够帮你解决如何才能做到学Python从入门到精通!而不是入门到放弃!攻略送你所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1209063.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存