静态Web服务器HTTP协议1.HTTP协议的介绍HTTP 协议的全称是 (HyperText Transfer Protocol)翻译过来就是超文本传输协议。超文本是超级文本的缩写是指超越文本限制或者超链接比如图片、音乐、视频、超链接等等都属于超文本。HTTP 协议的制作者是蒂姆・伯纳斯 - 李1991 年设计出来的HTTP 协议设计之前目的是传输网页数据的现在允许传输任意类型的数据。传输 HTTP 协议格式的数据是基于 TCP 传输协议的发送数据之前需要先建立连接。2.HTTP的作用HTTP规定了游览器和Web服务器通信数据的格式也就是说游览器和web服务器通信需要使用http协议。3.游览器访问Web服务器的通信过程通信效果图4.小结HTTP 协议是一个超文本传输协议HTTP 协议是一个基于 TCP 传输协议传输数据的HTTP 协议规定了浏览器和 Web 服务器通信数据的格式URL1.URL的概念URL的意思是统一资源定位符通常理解就是网络资源地址也就是我们常说的网址。2.URL的组成URL 的样子:https://news.163.com/18/1122/10/E178J2O4000189FH.htmlURL 的组成部分:① 协议部分:https://在http协议基础上进行了升级增加安全机制 》 443http://主流 》 80ftp://上传下载 》 FTP软件②域名部分:news.163.com 转换为 IP 地址有了 IP 地址就能找到这个计算机了③资源路径部分:/18/1122/10/E178J2O4000189FH.html确认具体要访问服务器上的那个资源3.域名和URL扩展域名地址就是IP地址的别名它是用点进行分割使用英文字母和数字组成的名字使用域名的目的就是方便的记住某台主机ip地址URL的扩展https://news.163.com/hello.html?page1count10查询参数部分?page1count10参数说明?后面的 page 表示第一个参数后面的参数都使用 进行连接》》参数 page 1第一页count 10显示10条数据4.小结URL就是网络资源的地址简称网址通过URL能够找到网络中对应的资源数据。URL组成部分1.协议部分2.域名部分3.资源路径部分4.查询参数部分查看HTTP协议的通信过程1.谷歌游览器开发者工具的使用首先需要安装Google Chrome浏览器然后Windows和Linux平台按F12调出开发者工具macOS选择视图-开发者-开发者工具或者直接使用altcommandi这个快捷键还有一个多平台通用的操作就是在网页右击选择检查。2.开发者工具里查看详细请求HTTP 请求头Request Headers 的抓包截图记录浏览器向服务端发起请求时自动携带的各类客户端信息下面分字段讲解基础通用请求头字段Accept 声明浏览器能接收的响应数据格式示例里支持text/html网页、xhtml 文档等资源类型。Accept-Encoding 告知服务端浏览器支持的压缩算法gzip、deflate、br服务端可选择对应算法压缩数据减少传输体积、加快加载速度。Accept-Language 浏览器偏好语言优先简体中文zh-CN其次中文zhq0.9代表语言权重优先级。Cache-Control: max-age0 强制不走本地缓存向服务端请求最新资源。Connection: keep-alive 开启长连接一次 TCP 连接可多次收发 HTTP 请求不用每次请求都重复建立连接提升访问效率。红框重点字段Host: guancha.gmw.cn作用标识本次请求要访问的目标域名核心意义一台服务器会托管多个网站虚拟主机服务器靠Host字段区分请求到底访问站点里的哪一个域名是 HTTP 请求必填头部。User-Agent截图只展示开头作用浏览器身份标识格式一般包含浏览器内核、操作系统版本、浏览器版本服务端通过 UA 判断用户设备是 Windows / 手机、使用什么浏览器可做兼容性适配、访问统计、爬虫识别拦截。Chrome 安全类请求头sec - 开头这类是现代 Chrome 新增的安全字段用来做跨域、请求来源管控sec-ch-ua上报浏览器品牌、版本sec-ch-ua-mobile标识是否为手机设备?0代表 PC 端sec-ch-ua-platform上报操作系统为 WindowsSec-Fetch-*系列标记请求类型页面跳转 / 跨域请求等帮助服务端做安全防护Upgrade-Insecure-Requests: 1浏览器告诉服务端优先使用 HTTPS 加密协议访问总结整张截图就是浏览器发起网页请求时自动打包发给网站服务器的附加信息Host告诉服务器要访问哪个站点User-Agent告诉服务器自己的设备、浏览器信息其余字段协商压缩、语言、缓存、连接方式、安全策略。HTTP请求报文分析1.HTTP请求报文HTTP请求报文是客户端如浏览器发送给服务器的数据包它定义了客户端希望执行的操作。一个完整的HTTP请求报文由以下三部分组成请求行 (Request Line)请求头 (Request Headers)请求体 (Request Body)- 可选1.1 请求行请求行是报文的第一行包含三个部分用空格分隔请求方法 (Method)指定要对资源执行的操作。请求目标 (Request Target)通常是URL的路径和查询字符串部分。HTTP版本 (HTTP Version)如 HTTP/1.1 或 HTTP/2。示例GET /index.html HTTP/1.11.2 HTTP请求方法报文类型HTTP协议定义了多种请求方法每种方法代表一种不同的操作意图。以下是几种最核心和常用的方法GET作用从服务器获取查询指定资源。特点请求参数附加在URL之后查询字符串可以被缓存、收藏为书签有长度限制。不应用于产生副作用的操作。示例获取网页、图片、API数据。POST作用向服务器提交新增数据通常会导致服务器状态变化如新建资源。特点数据放在请求体中更安全无长度限制。不可缓存。示例提交表单、上传文件、登录。PUT作用向服务器上传更新指定资源的最新完整内容。特点幂等操作多次执行结果相同。示例更新用户完整信息。DELETE作用请求服务器删除指定的资源。特点幂等操作。示例删除一篇文章、一个用户。HEAD作用与GET方法类似但服务器只返回响应头不返回响应体。特点用于获取资源的元信息如检查链接有效性、文件大小节省带宽。PATCH作用对资源进行局部修改而非完整替换。特点与PUT完整替换形成对比。示例只更新用户的邮箱地址。1.3 请求头请求头位于请求行之后以键值对的形式传递关于请求或客户端的附加信息。我们在上一节“查看HTTP协议的通信过程”中已经详细分析过例如Host: 目标主机和端口。User-Agent: 客户端软件信息。Accept: 客户端可接受的响应内容类型。Content-Type: 请求体的媒体类型如application/json。Authorization: 身份验证凭证。1.4 请求体请求体用于携带需要发送给服务器的数据通常在POST、PUT、PATCH等方法中使用。其格式由Content-Type请求头指定。常见格式表单数据:application/x-www-form-urlencoded(如nameJohnage30)多部分表单数据:multipart/form-data(用于文件上传)JSON数据:application/json(如{name: John, age: 30})纯文本:text/plain1.5 小结HTTP请求报文是客户端与服务器通信的“指令单”。其中请求方法如GET、POST、PUT、DELETE等定义了操作的核心意图是区分不同“类型”请求报文的关键。理解这些方法及其适用场景是进行Web开发和API设计的基础。2.GET2.1请求报文格式---- 请求行 ---- GET /wp-content/uploads/2020/12/zm.svg HTTP/ 1.1 # GET 请求方式 请求资源路径 HTTP 协议版本 ---- 请求头 ----- Host: www.itcast.cn # 服务器的主机地址和端口号默认是 80 Connection: keep-alive # 和服务端保持长连接 Upgrade-Insecure-Requests:1 # 让浏览器升级不安全请求使用 https 请求 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 # 用户代理也就是客户端的名称 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,image/apng,*/*;q0.8 # 可接受的数据类型 Accept-Encoding: gzip, deflate # 可接受的压缩格式 Accept-Language: zh-CN,zh;q0.9 #可接受的语言 Cookie: pgv_pvi1246921728; # 登录用户的身份标识 ---- 空行 ----2.2GET请求报文分析GET / HTTP/1.1\r\n Host: www.itcast.cn\r\n Connection: keep-alive\r\n Upgrade-Insecure-Requests: 1\r\n User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,image/apng, */*;q0.8\r\n Accept-Encoding: gzip, deflate\r\n Accept-Language: zh-CN,zh;q0.9\r\n Cookie: pgv_pvi1246921728; \r\n \r\n 请求头信息后面还有一个单独的\r\n不能省略 空白行备注说明每一行 HTTP 报文末尾都以\r\n回车换行作为行结束符所有请求头结束后必须额外再加一组\r\n用来标识请求头部分结束、分隔请求头与请求体本次 GET 请求无请求体因此末尾这组\r\n就是整个请求报文的结束标记。分析请求头字段取值作用说明Host: www.itcast.cn目标域名服务器靠该字段区分一台主机上托管的多个网站是 HTTP1.1 强制必填项默认访问 80 端口Connection: keep-alive保持长连接一次 TCP 连接可多次发送 HTTP 请求不用每次请求都重复三次握手建立连接提升访问效率Upgrade-Insecure-Requests: 1允许协议升级浏览器告知服务器后续尽量把 HTTP 明文请求自动升级为 HTTPS 加密请求User-Agent浏览器 系统标识上报客户端操作系统Mac OS X 10_12_4、浏览器内核与 Chrome 版本服务端可据此做兼容性适配、爬虫识别Accept可接收响应格式声明浏览器能解析网页、xml、图片等资源类型q代表优先级权重Accept-Encoding: gzip, deflate支持的压缩算法告知服务器可对响应数据使用这两种压缩格式减小传输流量、加快加载速度Accept-Language: zh-CN,zh;q0.9语言偏好优先返回简体中文内容其次是普通中文Cookie: pgv_pvi1246921728;身份标识携带本地缓存的 Cookie向服务器传递用户访问标识、登录态、浏览记录等信息3.POST请求3.1POST请求报文格式---- 请求行 ---- POST /xmweb?hostmail.itcast.cn_t1542884567319 HTTP/1.1 # POST请求方式 请求资源路径 HTTP协议版本 ---- 请求头 ---- Host: mail.itcast.cn # 服务器的主机地址和端口号,默认是80 Connection: keep-alive # 和服务端保持长连接 Content-Type: application/x-www-form-urlencoded # 告诉服务端请求的数据类型 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 # 客户端的名称 ---- 空行 ---- ---- 请求体 ---- usernamehellopasshello # 请求参数3.2POST请求报文分析POST /xmweb?hostmail.itcast.cn_t1542884567319 HTTP/1.1\r\n Host: mail.itcast.cn\r\n Connection: keep-alive\r\n Content-Type: application/x-www-form-urlencoded\r\n User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n \r\n(请求头信息后面还有一个单独的\r\n不能省略) usernamehellopasshello具体分析POST 报文结构请求行 → 请求头 → 分隔空行单独\r\n → 请求体和 GET 最大区别是 POST 携带请求体传参1. 请求行解析POST /xmweb?hostmail.itcast.cn_t1542884567319 HTTP/1.1POST请求方法用于向服务器提交数据登录、表单提交等场景核心参数放在请求体也可在 URL 拼接少量查询参数/xmweb接口资源路径URL 拼接参数hostmail.itcast.cn、_t1542884567319_t一般是时间戳用来防缓存HTTP/1.1使用 HTTP1.1 协议默认开启 TCP 长连接2. 请求头逐字段说明请求头内容作用Host: mail.itcast.cn目标域名HTTP1.1 必填项服务器靠它区分一台机器托管的多个站点默认走 80 端口Connection: keep-alive长连接复用同一个 TCP 连接多次收发 HTTP 请求省去反复三次握手的开销Content-Type: application/x-www-form-urlencoded请求体格式声明告知服务端请求体是普通表单键值对格式参数用拼接中文会做 url 编码是网页表单最常用格式User-Agent客户端标识客户端系统为 Mac OS X 10_12_4浏览器是 Chrome69 版本服务端可做兼容适配、爬虫识别3. 分隔空行单独\r\nHTTP 协议强制规范所有请求头结束后必须用一组\r\n分割请求头区域和请求体区域省略会导致服务器无法解析报文结构。4. 请求体usernamehellopasshello按照application/x-www-form-urlencoded格式组织两个登录参数用户名hello、密码hello这是 POST 核心传参位置相比 URL 拼接参数请求体数据不会暴露在浏览器地址栏、访问日志里私密性更好4.GET与POST请求报文小结4.1 一个HTTP请求报文可以有请求行、请求头、空行和请求体4个部分组成4.2 请求行是由三部分组成请求方式、请求资源路径、HTTP协议版本1.14.3 GET方式的请求报文没有请求体只有请求行、请求头、空行组成4.4 POST方式的请求报文可以有请求行、请求头、空行、请求体四部分组成。注意POST方式可以允许没有请求体但是这种格式很少见5.响应报文分析重点响应头响应数据---- 响应行/状态行 ---- HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述 ---- 响应头 ---- Server: Tengine # 服务器名称 Content-Type: text/html; charsetUTF-8 # 内容类型(响应的数据类型image/png) Connection: keep-alive # 和客户端保持长连接 Date: Fri, 23 Nov 2018 02:01:05 GMT # 服务端的响应时间 ---- 空行 ---- ---- 响应体 ---- !DOCTYPE htmlhtml langen .../html # 响应给客户端的数据(html网页)5.1响应头响应头信息主要是告诉游览器的客户端应该如何处理我们返回的数据。5.2响应数据6.HTTP响应状态码是用于表示Web服务器响应状态的3位数字代码搭建Python自带静态Web服务器1.什么是静态Web服务器2.搭建Python自带的静态Web服务器windows创建方式2.1创建一个文件夹然后把所有的资源文件都放入这个文件夹2.2在DOS窗口使用cd命令切换到此目录2.3使用python -m 命令创建静态Web服务器python -m http.server 9000示例-m表示运行包里面的模块执行这个命令的时候需要进入你自己指定静态文件的目录。然后通过游览器就能访问对应的html文件了。2.4访问Web静态服务器http://127.0.0.1:9000/3.小结静态Web服务器是为了发出请求的游览器提供静态文档的程序搭建Python自带的Web服务器使用python开发属于自己的Web服务器web服务器 TCP 服务器七步走 HTTP协议请求、响应1.开发步骤2.返回固定页面的数据#导入模块 import socket #1.创建套接字对象 tcp_server_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM) #设置端口复用 tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) #2.绑定IP与端口 tcp_server_socket.bind((,8080)) #3.设置监听 tcp_server_socket.listen(128) print(静态Web服务器启动成功访问http://127.0.0.1:8080) while True: #4.等待客户端连接浏览器连接 new_socket ,ip_port tcp_server_socket.accept() #5.接收消息返回结果是一个HTTP请求报文 client_request_data new_socket.recv(1024).decode(utf-8) print(收到浏览器请求) print(client_request_data) #6.读取html网页指定编码防止乱码 with open(rsource\index.html,r,encodingutf-8) as f: data f.read() #6.1响应行 response_line HTTP/1.1 200 OK\r\n #6.2响应头 添加字符集 response_header Content-Type: text/html;charsetutf-8\r\n #6.3空行 #6.4响应体 response_body data # ✅重点拼接完整报文头部 空行 html页面内容 response_msg response_line response_header \r\n response_body response_data response_msg.encode(utf-8) #发送完整响应报文 new_socket.send(response_data) #7.关闭本次客户端连接释放资源 new_socket.close()本地示例1.将index.html文件放到.py同级目录2.启动项目访问127.0.0.18080/index.html!DOCTYPE html html langzh-CN head meta charsetUTF-8 title用户登录/title !-- 引入外部CSS路径根据你的目录结构填写 -- link relstylesheet href../css/login.css /head body div classlogin-box h2 classlogin-title账号登录/h2 div classitem label用户名/label input typetext placeholder请输入用户名 idusername /div div classitem label密码/label input typepassword placeholder请输入登录密码 idpassword /div button classlogin-btn onclicklogin()立即登录/button /div script function login(){ let username document.getElementById(username).value.trim(); let password document.getElementById(password).value.trim(); if(!username){ alert(请输入用户名); return; } if(!password){ alert(请输入密码); return; } // 此处后续可对接后端POST登录接口 alert(登录信息已提交用户名 username); } /script /body /html后端将index.html读取反回给游览器3.本地控制台请求信息数据返回成功。3.返回指定页面返回index.html引用的login.css初始代码#导入socket模块 import socket #创建程序执行入口 if __name__ __main__: #1.创建套接字对象 tcp_server_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2.绑定IP和端口 tcp_server_socket.bind((,8080)) #3.设置监听 tcp_server_socket.listen(128) while True: #4.等待客户连接 new_socket,ip_port tcp_server_socket.accept() #5.接收客户端发过来的请求http结构请求报文 recv_data new_socket.recv(1024).decode(utf-8)1.分析游览器请求2.将资源路径拿出来实现指定页面2.1观察游览器请求类型type(recv_data)控制台响应结果为字符串类型class str2.2 把recv_data用split按空格进行切割拿到访问资源路径request_line recv_data.split( ) print(request_line)返回结果列表注意.split( ,maxsplit2)中maxplit可以定义切几刀2.3通过列表下标拿到资源路径request_path request_line[1]游览器访问拿到资源路径完整代码!DOCTYPE html html langzh-CN head meta charsetUTF-8 title用户登录/title !-- 引入外部CSS路径根据你的目录结构填写 -- link relstylesheet hrefcss/login.css /head body div classlogin-box h2 classlogin-title账号登录/h2 div classitem label用户名/label input typetext placeholder请输入用户名 idusername /div div classitem label密码/label input typepassword placeholder请输入登录密码 idpassword /div button classlogin-btn onclicklogin()立即登录/button /div script function login(){ let username document.getElementById(username).value.trim(); let password document.getElementById(password).value.trim(); if(!username){ alert(请输入用户名); return; } if(!password){ alert(请输入密码); return; } // 此处后续可对接后端POST登录接口 alert(登录信息已提交用户名 username); } /script /body /html请求报文与响应报文的作用发起请求访问响应数据服务器端进行数据响应到前端渲染页面FastAPI框架概念FastAPI是一个现代的快速高性能python web框架基于标准的python类型提示使用python3.6构建API的web框架搭建环境fastapi安装方式安装FastAPIFastAPI的安装通常需要Python 3.7或更高版本。可以通过pip工具直接安装FastAPI及其依赖。pip install fastapi(.venv) PS C:\Users\Administrator\PycharmProjects\WelcomeScreen\基础学习 pip install fastapi Collecting fastapi Downloading fastapi-0.139.2-py3-none-any.whl.metadata (26 kB) Collecting starlette0.46.0 (from fastapi) Downloading starlette-1.3.1-py3-none-any.whl.metadata (6.4 kB) Collecting pydantic2.9.0 (from fastapi) Downloading pydantic-2.13.4-py3-none-any.whl.metadata (109 kB) Collecting typing-extensions4.8.0 (from fastapi) Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB) Collecting typing-inspection0.4.2 (from fastapi) Downloading typing_inspection-0.4.2-py3-none-any.whl.metadata (2.6 kB) Collecting annotated-doc0.0.2 (from fastapi) Downloading annotated_doc-0.0.4-py3-none-any.whl.metadata (6.6 kB) Collecting annotated-types0.6.0 (from pydantic2.9.0-fastapi) Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB) Collecting pydantic-core2.46.4 (from pydantic2.9.0-fastapi) Downloading pydantic_core-2.46.4-cp314-cp314-win32.whl.metadata (6.7 kB) Collecting anyio5,3.6.2 (from starlette0.46.0-fastapi) Downloading anyio-4.14.2-py3-none-any.whl.metadata (4.6 kB) Collecting idna2.8 (from anyio5,3.6.2-starlette0.46.0-fastapi) Downloading idna-3.18-py3-none-any.whl.metadata (6.1 kB) Downloading fastapi-0.139.2-py3-none-any.whl (130 kB) Downloading annotated_doc-0.0.4-py3-none-any.whl (5.3 kB) Downloading pydantic-2.13.4-py3-none-any.whl (472 kB) Downloading pydantic_core-2.46.4-cp314-cp314-win32.whl (2.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 10.5 kB/s 0:02:52 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB) Downloading starlette-1.3.1-py3-none-any.whl (73 kB) Downloading anyio-4.14.2-py3-none-any.whl (125 kB) Downloading idna-3.18-py3-none-any.whl (65 kB) Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB) Downloading typing_inspection-0.4.2-py3-none-any.whl (14 kB) Installing collected packages: typing-extensions, idna, annotated-types, annotated-doc, typing-inspection, pydantic-core, anyio, starlette, pydantic, fastapi Successfully installed annotated-doc-0.0.4 annotated-types-0.7.0 anyio-4.14.2 fastapi-0.139.2 idna-3.18 pydantic-2.13.4 pydantic-core-2.46.4 starlette-1.3.1 typing-extensions-4.16.0 typing-inspection-0.4.2 [notice] A new release of pip is available: 26.0.1 - 26.1.2 [notice] To update, run: python.exe -m pip install --upgrade pip安装ASGI服务器FastAPI需要一个ASGI服务器来运行推荐使用Uvicorn或Hypercorn。以下是安装Uvicorn的命令pip install uvicorn.venv) PS C:\Users\Administrator\PycharmProjects\WelcomeScreen\基础学习 pip install uvicorn Collecting uvicorn Downloading uvicorn-0.51.0-py3-none-any.whl.metadata (6.6 kB) Collecting click7.0 (from uvicorn) Downloading click-8.4.2-py3-none-any.whl.metadata (2.6 kB) Collecting h110.8 (from uvicorn) Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB) Collecting colorama (from click7.0-uvicorn) Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB) Downloading uvicorn-0.51.0-py3-none-any.whl (73 kB) Downloading click-8.4.2-py3-none-any.whl (119 kB) Downloading h11-0.16.0-py3-none-any.whl (37 kB) Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB) Installing collected packages: h11, colorama, click, uvicorn Successfully installed click-8.4.2 colorama-0.4.6 h11-0.16.0 uvicorn-0.51.0 [notice] A new release of pip is available: 26.0.1 - 26.1.2 [notice] To update, run: python.exe -m pip install --upgrade pip验证安装安装完成后可以通过以下命令验证FastAPI和Uvicorn是否安装成功python -c import fastapi; print(fastapi.__version__) uvicorn --version创建简单的FastAPI应用以下是一个简单的FastAPI应用示例保存为main.pyfrom fastapi import FastAPI app FastAPI() app.get(/) def read_root(): return {Hello: World}运行FastAPI应用使用Uvicorn运行FastAPI应用uvicorn main:app --reloadmain:appmain是Python文件名不含.pyapp是FastAPI实例的名称。--reload启用热重载适合开发环境。在命令行进行运行访问应用运行后默认情况下应用会运行在http://127.0.0.1:8000。可以通过浏览器或工具如curl访问curl http://127.0.0.1:8000可选依赖如果需要额外的功能可以安装可选依赖pip install fastapi[all]这会安装所有可选依赖包括数据库支持、模板渲染等。FastAPI的基本使用基本步骤1.导入模块2.创建FastAPI框架对象3.通过app路由装饰器收发数据4.运行服务器代码实现#1.导入模块 #导入FastAPI类 from fastapi import FastAPI #导入Response类用于返回数据给游览器 from fastapi import Response #导入uvicorn服务器模块用于保持此文件一直运行类似于while True import uvicorn #2.创建FastAPI框架对象 app FastAPI() #3.通过app路由装饰器收发信息 #路由 游览器请求 服务器响应对应关系 #接收游览器发送过来的请求 app.get(source/index.html) #响应数据给游览器 def main(): # 向上一层找到source目录 with open(../source/index.html, rb) as f: data f.read() return Response(data, media_typetext/html) #4.运行服务器 #FastAPI对象 #绑定IP #绑定端口号 uvicorn.run(app,host127.0.0.1,port9000)通过FastAPI访问多个指定页面路由装饰器的作用实际上通过路由装饰器我们就可以让一个网页对应一个函数也就是可以实现访问指定网页了。示例代码from fastapi import FastAPI, Response import uvicorn import os app FastAPI() # 当前脚本所在文件夹 BASE_DIR os.path.dirname(os.path.abspath(__file__)) # 拼接路径 SOURCE_DIR os.path.join(BASE_DIR, source) # 标准化路径自动消除../ SOURCE_DIR os.path.normpath(SOURCE_DIR) print(静态资源目录, SOURCE_DIR) app.get(/index.html) def index(): file_path os.path.join(SOURCE_DIR, index.html) print(要打开的文件, file_path) with open(file_path,rb) as f: data f.read() return Response(data,media_typetext/html) app.get(/gdp.html) def gdp(): file_path os.path.join(SOURCE_DIR, gdp.html) with open(file_path,rb) as f: data f.read() return Response(data,media_typetext/html) if __name__ __main__: uvicorn.run(app, host127.0.0.1, port8000)游览器访问127.0.0.1/index.html进程多任务的介绍电脑的多任务多个任务的优势多任务同时执行可以大大提高程序执行任务能利用现学知识不能让多个任务同时执行多任务的概念多任务是指在同一时间内执行多个任务例如现在电脑安装的操作系统都是多任务操作系统可以同时运行着多个软件。多任务的两种表现形式并发在一段时间内交替去执行多个任务例子并行在一段时间内真正的同时一起执行多个任务例子知识要点1.使用多任务能充分利用CPU资源提高程序的执行效率让你的程序具备处理多个任务的能立。2.多任务执行方式有两种方式并发在一段时间内交替去执行多个任务。并行在一段时间内真正的同时一起执行多个任务进程的介绍程序中实现多任务的方式在python中想要实现多任务可以使用多进程来完成进程的概念进程是资源分配的最小单位它是操作系统进行资源分配和调度运行的基本单位通俗理解一个正在运行的程序一个进程。例如正在运行的qq,微信等 他们都是一个进程。多进程的作用思考途中是一个非常简单的程序一旦运行hello.py这个程序按照这个代码的执行顺序func_a函数执行完毕之后才能执行func_b函数。如果可以让func_a和func_b同时运行显然执行hello.py这个程序的效率会大大提升。知识点1.进程是资源分配的最小单位2.多进程是python程序中实现多任务的一种方式使用多进程可以大大提生效率多进程完成多任务进程的创建步骤三步走1.导入进程包import multiprocessing2.通过进程创建进程对象进程对象 multiprocessing.Process()3.启动进程执行任务进程对象.start()通过进程类创建进程对象进程对象 multiprocessing.Process(target任务名)#创建一个函数func_a() import multiprocessing import time def func_a(): print(任务A) time.sleep(3) #创建一个函数func_b() def func_b(): print(任务B) time.sleep(3) if __name__ __main__: p1 multiprocessing.Process(targetfunc_a) p1.start() p2 multiprocessing.Process(targetfunc_b) p2.start() print(主进程结束)输出结果