当前位置:   article > 正文

python: 网络编程及fastapi快速搭建web服务器_python fastapi 部署

python fastapi 部署

一.网络编程


 1.网络编程三要素

ip地址、端口、TCP协议

ip地址

        ip地址作用: 根据ip地址能够找到网络中的具体设备(电脑,打印机)

        ip地址概念: ip地址是网络设备的唯一标识

        ip地址分类: ipv4 和 ipv6(号称世界上每一粒沙子都能分配到ipv6地址)

        ipv6用八个四位十六进制数表示地址, 一个四位十六进制数可以表示65536个十进制数, ipv6地址一共有65535的8次方个, 即3.40*10的38次方个.  

        查看网络状态: ping ip地址/域名

        域名: 可以理解成ip地址的别名

        查看本机ip地址:   win->ipconfig    mac->ifconfig

        常用本机地址:  localhost->127.0.0.1 

端口(数据传输的通道)

        端口号作用: 根据端口号能够找到网络设备上的程序端口

        端口作用:  根据端口能够找到网络设备上的具体某个程序

        端口号概念: 用于区分和管理端口的编号

        端口概念: 端口是数据传输的通道(数据的必经之路)

        端口号范围: 0-65535

        端口号个数:  65536个

        知名端口号: 0-1023

        动态端口号: 1024-65535

协议(规定了数据传输的规则)

        TCP协议: 传输控制协议

        TCP协议特点: 面向连接,可靠,基于字节流传输

        TCP面向连接步骤:  建立连接,传输数据,关闭连接

        TCP可靠性: 发送应答机制,超时重传,错误校验,流量控制和阻塞管理

2.socket套接字

socket单词:  中文意思是插座

socket套接字: 网络多个进程中数据传输的工具(网上传送输入输出的装置)

进程概念: 运行中的程序

3.网络通信流程

1.根据ip地址找到网络设备(电脑,打印机)

2.根据端口号找到对应端口

3.根据端口找到对应程序

4.端口传输需要遵循协议规则

5.socket把数据从一个进程传送到另一个进程中

4.tcp开发服务器

TCP服务器开发固定7步:
1.创建socket服务器对象
2.绑定服务器信息(ip地址和端口号)
3.设置监听
4.等待客户端连接,直到连接成功为止
5.接收数据
6.发送数据
7.关闭socket服务器对象

8.设置端口复用(若出现端口不能重复使用, 就设置端口复用)

   注: 先运行前7步, 若出现第8步的情况再设置第8步, 第8步在第2步绑定服务器地址和端口号前设置.

  1. # 1. 创建socket服务器对象(买手机)
  2. import socket
  3. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # AF_INET代表ipv4,SOCK_STREAM代表tcp协议
  4. # 8.设置端口复用(如果出现端口不能重复使用,就设置端口复用)
  5. server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
  6. # 2. 绑定服务器地址和端口号(手机绑定卡,激活手机号)
  7. server_addr = ('', 8081)
  8. server.bind(server_addr) # 参数是服务器地址
  9. # 3. 设置监听(开机)
  10. server.listen(128) # 参数是最大连接数
  11. # 4. 等着客户端连接,直到接通为止(等着接电话)
  12. new_server, client_addr = server.accept() # 注意: 返回值是元组,拆包:新的socket对象和客户端地址和端口号信息
  13. print(f'{client_addr}客户端已连接')
  14. # 5. 从新的socket对象中接收客户端数据(听对方说什么) 注意: 接收的是二进制数据
  15. client_data = new_server.recv(1024) # 参数是接收的数据长度 返回值是客户端数据
  16. print(f'客户端发来数据:{client_data.decode("gbk")}') # 二进制->字符串: decode(编码格式)
  17. # 6. 给客户端发送数据(给对方回复) 注意: 发送也需要编码成二进制数据
  18. new_server.send('我是服务器binzi'.encode("gbk")) # 字符串->二进制: encode(编码格式)
  19. # 7. 关闭socket服务器对象(挂电话)
  20. new_server.close()
  21. server.close()

 二.web服务器


 1.http协议

http协议作用: 规定了浏览器和web服务器之间的通信格式

html概念: 超文本标记语言

http协议概念: 超文本传输协议

  注意: http协议是基于TCP协议的(传输数据需要面向连接)

2.URL

URL(Uniform Resoure Locator):  统一资源定位符

举例->url: http://www.itheima.com/index.com?name=binzi&pwd=123456

协议部分: http://

域名部分: www.itheima.com

资源路径部分: /index.com

查询参数部分[可选]: ?name=binzi&pwd=123456

get方式: 有查询参数部分, 查询参数是在资源路径的?后拼接

post方式: 没有查询参数部分, 查询参数是放到了请求体里

3.开发者模式

如何进入开发者模式?
Windows和Linux平台按F12调出开发者工具
mac OS选择 视图 -> 开发者 -> 开发者工具或者直接使用 alt+command+i 这个快捷键
还有一个多平台通用的操作就是在网页右击选择检查。


开发者工具的标签选项说明:
元素(Elements)  :用于查看或修改HTML标签
控制台(Console):执行js代码
源代码(Sources):查看静态资源文件,断点调试JS代码
网络(Network)   :查看http协议的通信过程

开发者工具的Headers选项总共有三部分组成:
General: 主要信息
Response Headers: 响应头
Request Headers: 请求头
Response选项是查看响应体信息的

4,请求报文

请求报文: 请求方式不同,对应的报文结构不同

注意:每行末位默认有一个\r\n

get方式请求报文:  请求行  请求头  请求空行

post方式请求报文: 请求行  请求头  请求空行  请求体

5.响应报文

响应报文:  响应行  响应头  响应空行  响应体

具体响应格式:
响应行:  HTTP/1.1 200 OK
响应头:  Server: binzi
响应空行: \r\n
响应体:  页面

注意:每行末位默认有一个\r\n

常见状态码:
2xx: 访问成功   常见的是200
3xx: 重定向     常见的是301
4xx: 客户端错误  常见的是404
5xx: 服务器错误  常见的是500

6.web服务器返回一句话

  1. # 1. 创建socket服务器对象(买手机)
  2. import socket
  3. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # AF_INET代表ipv4,SOCK_STREAM代表tcp协议
  4. # 2. 绑定服务器地址和端口号(手机绑定卡,激活手机号)
  5. server_addr = ('', 8084)
  6. server.bind(server_addr) # 参数是服务器地址
  7. # 3. 设置监听(开机)
  8. server.listen(128) # 参数是最大连接数
  9. # 4. 等着客户端连接,直到接通为止(等着接电话)
  10. new_server, client_addr = server.accept() # 注意: 返回值是元组,拆包:新的socket对象和客户端地址和端口号信息
  11. print(f'{client_addr}客户端已连接')
  12. # 5. 从新的socket对象中接收客户端数据(听对方说什么) 注意: 接收的是二进制数据
  13. client_data = new_server.recv(1024) # 参数是接收的数据长度 返回值是客户端数据
  14. print(f'{client_data}')
  15. # [转换成响应报文]6. 给客户端发送数据(给对方回复) 注意: 发送也需要编码成二进制数据
  16. res_line = 'HTTP/1.1 200 ol\r\n'
  17. res_head = 'Server: binzi\r\n'
  18. res_null = '\r\n'
  19. res_body = '我是服务器~'
  20. res_all = res_line + res_head + res_null + res_body
  21. new_server.send(res_all.encode('gbk')) # 字符串->二进制: encode(编码格式)
  22. # 7. 关闭socket服务器对象(挂电话)
  23. new_server.close()
  24. server.close()

7.web服务器返回一个页面

  1. # 1. 创建socket服务器对象(买手机)
  2. import socket
  3. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # AF_INET代表ipv4,SOCK_STREAM代表tcp协议
  4. # 2. 绑定服务器地址和端口号(手机绑定卡,激活手机号)
  5. server_addr = ('', 8084)
  6. server.bind(server_addr) # 参数是服务器地址
  7. # 3. 设置监听(开机)
  8. server.listen(128) # 参数是最大连接数
  9. # 4. 等着客户端连接,直到接通为止(等着接电话)
  10. new_server, client_addr = server.accept() # 注意: 返回值是元组,拆包:新的socket对象和客户端地址和端口号信息
  11. print(f'{client_addr}客户端已连接')
  12. # 5. 从新的socket对象中接收客户端数据(听对方说什么) 注意: 接收的是二进制数据
  13. client_data = new_server.recv(1024) # 参数是接收的数据长度 返回值是客户端数据
  14. print(f'{client_data}')
  15. # [转换成响应报文]6. 给客户端发送数据(给对方回复) 注意: 发送也需要编码成二进制数据
  16. res_line = 'HTTP/1.1 200 ol\r\n'
  17. res_head = 'Server: binzi\r\n'
  18. res_null = '\r\n'
  19. # with open方式自动关闭文件对象
  20. with open('index.html','rb') as f:
  21. res_body = f.read() # 读出来是二进制
  22. res_all = res_line + res_head + res_null
  23. new_server.send(res_all.encode() + res_body) # 字符串->二进制: encode(编码格式)
  24. # 7. 关闭socket服务器对象(挂电话)
  25. new_server.close()
  26. server.close()

三.fastapi框架


FastAPI简介: 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

FastAPI 框架关键特性: 高性能,易于学习,高效编码,生产可用

uvicorn: 异步服务器,用于配合fastapi框架一起 快速 搭建web服务器

安装

命令1: pip install fastapi

命令2: pip install uvicor

跳转页面

  1. # 1.导包(注意: 自己创建的文件名不要叫fastapi)
  2. from fastapi import FastAPI
  3. from fastapi import Response
  4. import uvicorn
  5. # 2.创建fastapi对象
  6. app = FastAPI()
  7. # 3.fastapi处理web数据
  8. # 访问url: http://127.0.0.1:8086/index.html
  9. @app.get('/index.html') # 参数是资源路径
  10. def show():
  11. with open('index.html', 'rb') as f:
  12. res_body = f.read() # 注意:读出来已经是二进制
  13. return Response(res_body)
  14. # 4.启动服务器
  15. uvicorn.run(app, host='127.0.0.1', port=8086)

加载图片

  1. # fastapi: 快速,高效,高性能,生产可用的最快python版本web框架
  2. # 1.导包
  3. from fastapi import FastAPI
  4. from fastapi import Response
  5. import uvicorn
  6. # 2.创建对象
  7. api = FastAPI()
  8. # 3.处理web数据 举例: 网址url: http://127.0.0.1:8081/
  9. @api.get('/') # 自动跳转首页
  10. def show():
  11. with open('index.html', 'rb') as f:
  12. res_body = f.read()
  13. return Response(res_body)
  14. # 注意: 如果跳转的页面包含图片,浏览器会自动发送请求:http://127.0.0.1:8081/picture.jpg
  15. @api.get('/picture.jpg') # 自动加载图片
  16. def show():
  17. # 自动跳转首页
  18. with open('picture.jpg', 'rb') as f:
  19. res_body = f.read()
  20. return Response(res_body)
  21. # 4.启动服务器
  22. uvicorn.run(api, host='127.0.0.1', port=8081)

加载视频

  1. # fastapi: 快速, 高效, 高性能, 生产可用的最快的python版本web框架
  2. # 1.导包
  3. from fastapi import FastAPI, Response
  4. import uvicorn
  5. # 2.创建对象
  6. app = FastAPI()
  7. # 3.处理web数据
  8. @app.get('/') # 参数可以理解成是url的资源路径部分
  9. def show():
  10. with open('F:\\00.heima\\就业班\\day04_220904\\课堂代码\\123\\index.html', 'rb') as fp:
  11. res_body = fp.read()
  12. res = Response(res_body)
  13. return res
  14. @app.get('/iu_03.jpg') # 参数可以理解成是url的资源路径部分
  15. def show():
  16. with open('F:\\00.heima\\就业班\\day04_220904\\课堂代码\\123\\iu_03.jpg', 'rb') as fp:
  17. res_body = fp.read()
  18. res = Response(res_body)
  19. return res
  20. @app.get('/HD.mp4') # 参数可以理解成是url的资源路径部分
  21. def show():
  22. with open('F:\\00.heima\\就业班\\day04_220904\\课堂代码\\123\\HD.mp4', 'rb') as fp:
  23. res_body = fp.read()
  24. res = Response(res_body)
  25. return res
  26. # 4.启动服务器
  27. uvicorn.run(app, host='127.0.0.1', port=9092)

注: 要实现图片, 视频加载的功能, 需要在html文件中有相应的请求

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/883992
推荐阅读
相关标签
  

闽ICP备14008679号