From e2cb63fb26831f289918a102d5775f6e50eeea03 Mon Sep 17 00:00:00 2001 From: PinkR1ver <3180102330@zju.edu.cn> Date: Sat, 9 Mar 2024 16:50:03 +0800 Subject: [PATCH] Add note --- .../code_frame_learn/flask/MSGI.md | 54 ++++++++++++++++ .../python/python_decorator.md | 52 ++++++++++++++++ .../Pasted image 20240308151842.png | Bin 0 -> 6433 bytes .../Pasted image 20240308153643.png | Bin 0 -> 11968 bytes .../web/http/http_introduction.md | 58 ++++++++++++++++++ 5 files changed, 164 insertions(+) create mode 100644 content/computer_sci/coding_knowledge/python/python_decorator.md create mode 100644 content/computer_sci/web/http/attachments/Pasted image 20240308151842.png create mode 100644 content/computer_sci/web/http/attachments/Pasted image 20240308153643.png diff --git a/content/computer_sci/code_frame_learn/flask/MSGI.md b/content/computer_sci/code_frame_learn/flask/MSGI.md index 7f422810d..43a2c2e39 100644 --- a/content/computer_sci/code_frame_learn/flask/MSGI.md +++ b/content/computer_sci/code_frame_learn/flask/MSGI.md @@ -55,8 +55,62 @@ def application(environ, start_response): * environ:一个包含所有HTTP请求信息的`dict`对象; * start_response:一个发送HTTP响应的函数。 +在`application()`函数中,调用: + +```python +start_response('200 OK', [('Content-Type', 'text/html')]) +``` + +就发送了HTTP响应的Header,注意Header只能发送一次,也就是只能调用一次`start_response()`函数。`start_response()`函数接收两个参数,一个是HTTP响应码,一个是一组`list`表示的HTTP Header,每个Header用一个包含两个`str`的`tuple`表示。 + +通常情况下,都应该把`Content-Type`头发送给浏览器。其他很多常用的HTTP Header也应该发送。 + +然后,函数的返回值`b'

Hello, web!

'`将作为HTTP响应的Body发送给浏览器。 + +有了WSGI,我们关心的就是如何从`environ`这个`dict`对象拿到HTTP请求信息,然后构造HTML,通过`start_response()`发送Header,最后返回Body。 + +整个`application()`函数本身没有涉及到任何解析HTTP的部分,也就是说,底层代码不需要我们自己编写,我们只负责在更高层次上考虑如何响应请求就可以了。 + +这个`application()`函数怎么调用?如果我们自己调用,两个参数`environ`和`start_response`我们没法提供,返回的`bytes`也没法发给浏览器。 + +**所以`application()`函数必须由WSGI服务器来调用**。有很多符合WSGI规范的服务器,我们可以挑选一个来用。但是现在,我们只想尽快测试一下我们编写的`application()`函数真的可以把HTML输出到浏览器,所以,要赶紧找一个最简单的WSGI服务器,把我们的Web应用程序跑起来。 + + +因此我们需要编写以下两个py程序: + +```python +# hello.py + +def application(environ, start_response): + start_response('200 OK', [('Content-Type', 'text/html')]) + return [b'

Hello, web!

'] +``` + + +```python +# server.py +# 从wsgiref模块导入: +from wsgiref.simple_server import make_server +# 导入我们自己编写的application函数: +from hello import application + +# 创建一个服务器,IP地址为空,端口是8000,处理函数是application: +httpd = make_server('', 8000, application) +print('Serving HTTP on port 8000...') +# 开始监听HTTP请求: +httpd.serve_forever() +``` + +其中,`hello.py`,是实现web应用程序的WSGI处理函数,`server.py`是负责启动WSGI服务器,加载`application()`函数 + +# Conclusion + +无论多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过`environ`获得,HTTP响应的输出都可以通过`start_response()`加上函数返回值作为Body。 + +复杂的Web应用程序,光靠一个WSGI函数来处理还是太底层了,我们需要在WSGI之上再抽象出Web框架,进一步简化Web开发。 # Reference * https://www.liaoxuefeng.com/wiki/1016959663602400/1017805733037760 +* https://www.liaoxuefeng.com/wiki/1016959663602400/1017806472608512 diff --git a/content/computer_sci/coding_knowledge/python/python_decorator.md b/content/computer_sci/coding_knowledge/python/python_decorator.md new file mode 100644 index 000000000..3df40c4d1 --- /dev/null +++ b/content/computer_sci/coding_knowledge/python/python_decorator.md @@ -0,0 +1,52 @@ +--- +title: Decorators in Python +tags: + - python + - coding-language +date: 2024-03-09 +--- +在 **Python** 中,**@** 符号通常用作**装饰器** + +# abstract + +**装饰器**:**@** 符号用于修饰函数,为现有函数增加额外的功能。常见的用途包括插入日志、性能测试、事务处理等。装饰器的创建规则如下: + - 装饰器是一个函数。 + - 装饰器接受被修饰函数作为参数。 + - 装饰器返回一个新函数。 + - 被修饰函数的签名保持不变。 + + +# example + + +```python +def uppercase_decorator(func): + def wrapper(): + result = func().upper() + return result + return wrapper + +def emphasis_decorator(func): + def wrapper(): + result = func() + return f"**{result}**" + return wrapper + +@uppercase_decorator +@emphasis_decorator +def greet(): + return "hello" + +print(greet()) +``` + +在上面的示例中,`@funcB` 修饰了函数 `funA`,使得 `funA` 在执行时会先调用 `funcB`,然后再执行自身的逻辑。 + + +# detail + +detail见下方的reference,还是蛮复杂的,要仔细看看 + +# Reference + +* https://medium.com/citycoddee/python%E9%80%B2%E9%9A%8E%E6%8A%80%E5%B7%A7-3-%E7%A5%9E%E5%A5%87%E5%8F%88%E7%BE%8E%E5%A5%BD%E7%9A%84-decorator-%E5%97%B7%E5%97%9A-6559edc87bc0 \ No newline at end of file diff --git a/content/computer_sci/web/http/attachments/Pasted image 20240308151842.png b/content/computer_sci/web/http/attachments/Pasted image 20240308151842.png new file mode 100644 index 0000000000000000000000000000000000000000..99223034b88c938be6568d513aa089c95cd97081 GIT binary patch literal 6433 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 aN&8X+T*>;^$V&>q$HmdrfpX0M{{I2g^ApAZ literal 0 HcmV?d00001 diff --git a/content/computer_sci/web/http/attachments/Pasted image 20240308153643.png b/content/computer_sci/web/http/attachments/Pasted image 20240308153643.png new file mode 100644 index 0000000000000000000000000000000000000000..48605cce831d4dc7737bb80a9b9b567efd9959b6 GIT binary patch literal 11968 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 literal 0 HcmV?d00001 diff --git a/content/computer_sci/web/http/http_introduction.md b/content/computer_sci/web/http/http_introduction.md index 367164990..8b1a732f1 100644 --- a/content/computer_sci/web/http/http_introduction.md +++ b/content/computer_sci/web/http/http_introduction.md @@ -15,6 +15,64 @@ HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。 * `Network`显示浏览器和服务器的通信 * `Console` 用于debug的控制台,debug JS的运行 +![](computer_sci/web/http/attachments/Pasted%20image%2020240308153643.png) + + +可以看出来,浏览器发送给谷歌服务器`GET`的请求。 + +`GET`表示一个读取请求,将从服务器获得网页数据,`/`表示URL的路径,URL总是以`/`开头,`/`就表示首页 + + +HTTP响应分为Header和Body两部分(Body是可选项),我们在`Network`中看到的Header最重要的几行如下: + +``` +200 OK +``` + +`200`表示一个成功的响应,后面的`OK`是说明。失败的响应有`404 Not Found`:网页不存在,`500 Internal Server Error`:服务器内部出错,等等。 + +``` +Content-Type: text/html +``` + +`Content-Type`指示响应的内容,这里是`text/html`表示HTML网页。请注意,浏览器就是依靠`Content-Type`来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是`http://example.com/abc.jpg`,它也不一定就是图片。 + +HTTP响应的**Body就是HTML源码** + +HTTP请求的流程: + +> [!abstract] +> 步骤1:浏览器首先向服务器发送HTTP请求,请求包括: +> +> 方法:`GET`还是`POST`,`GET`仅请求资源,`POST`会附带用户数据; +> +> 路径:`/full/url/path`; +> +> 域名:由Host头指定:`Host: www.sina.com.cn` +> +> 以及其他相关的Header; +> +> 如果是POST,那么请求还包括一个Body,包含用户数据。 + + +> [!abstract] +> 步骤2:服务器向浏览器返回HTTP响应,响应包括: +> +> 响应代码:`200`表示成功,`3xx`表示重定向,`4xx`表示客户端发送的请求有错误,`5xx`表示服务器端处理时发生了错误; +> +> 响应类型:由`Content-Type`指定,例如:`Content-Type: text/html;charset=utf-8`表示响应类型是HTML文本,并且编码是`UTF-8`,`Content-Type: image/jpeg`表示响应类型是JPEG格式的图片; +> +> 以及其他相关的Header; +> +> 通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。 + +> [!abstract] +> 步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。 + + +Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP响应中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源。 + # Reference + * https://www.liaoxuefeng.com/wiki/1016959663602400/1017804782304672 \ No newline at end of file