【1】Web应用
基于socket写一个服务端
import socket
def server_run():
soc = socket.socket()
soc.bind(('127.0.0.1', 8008))
soc.listen(5)
while True:
conn, addr = soc.accept()
recv_data = conn.recv(1024)
print(recv_data)
# 1 直接在send里写,发送给客户端 http响应的格式
# conn.send(b'HTTP/1.1 200 OKrnrn<h1>hello web</h1><img src="https://img2.woyaogexing.com/2022/12/24/a22973058eab2aafa11248a8b6031f5e.jpg"></img>')
#2 打开一个html文件,发送给客户端
# with open('index.html','r',encoding='utf-8') as f:
# data=f.read()
# conn.send(('HTTP/1.1 200 OKrnrn%s'%data).encode('utf-8'))
# 3 动态网页,字符串替换
import time
now=time. ("%Y-%m-%d %H:%M:%S", time.localtime())
print(now)
with open('index.html','r',encoding='utf-8') as f:
data=f.read()
data=data.replace('@@',now)
conn.send(('HTTP/1.1 200 OKrnrn%s'%data).encode('utf-8'))
conn.close()
if __name__ == '__main__':
server_run()
【2】HTTP协议
【2.1】http请求协议与响应协议
请求协议
请求协议:
响应协议
响应协议:
响应首行 ———》HTTP/1.1 200 OK rn # 协议版本号 响应状态码 状态码解释
【2.2】URL简介,统一资源定位符
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它
格式:
协议: //IP:端口(80)/路径?name=lqz&age=18
补充:
补充
请求一个地址:https://www.cnblogs.com/liuqingzheng/articles
https://www.cnblogs.com/liuqingzheng/articles?a=1&b=2
取值:request.GET 或者 request.get_full_path
方式二、将数据携带在请求体中 —- http的请求体 —— 有多种编码格式
编码格式:
取值:request.POST 或者 request.body
方式三、将数据携带在请求头中
$.ajax({ path:/login/?name=lqz, data:{} })----->写成这样---》最终它会变成一个http请求,写的path实际是请求路径,写的data就是请求体
【2.3】HTTP协议补充
HTTP协议0.9版本:
HTTP协议1.1版本:
长连接:
第一次发送请求:
第二次发送请求:
断开链接 ———— 四次挥手
HTTP协议2.0版本 ——–》 多路复用
客户端 ——–》 服务端
tcp流式协议 ——– 》一次带多条数据(比如5条http请求数据)
断开链接 ———-》四次挥手
【3】Web框架
1、概念
Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法,浏览器和服务器的是基于HTTP协议进行通信的,大大提高了开发的效率
2、wsgi协议
客户端浏览器和 ———————-> python web框架之间通信需要遵循这个协议
发出来的是http请求 符合wsgi协议的web服务器 django,flask requset response
1、wsgiref:django框架默认使用wsgiref —- 特点:性能低,并发量低,测试时使用
wsgiref协议:web服务器后面的python框架一定是一个可调用对象,必须接收两个参数(environ,start_response) —— environ接收客户端发来的所有请求
3、使用wsgiref写个web服务
from wsgiref.simple_server import make_server
def mya(environ, start_response):
print(environ)
start_response('200 OK', [('Content-Type', 'text/html')])
if environ.get('PATH_INFO') == '/index':
with open('index.html','rb') as f:
data=f.read()
elif environ.get('PATH_INFO') == '/login':
with open('login.html', 'rb') as f:
data = f.read()
else:
data=b'<h1>Hello, web!</h1>'
return [data]
# 可调用对象---》能加括号执行的对象
if __name__ == '__main__':
myserver = make_server('', 8011, mya) # 请求来了---》经过wsgiref---》调用后面的可调用对象--》传入两个参数(environ, start_response)
print('监听8011')
myserver.serve_forever()
原文地址:https://blog.csdn.net/m0_69962105/article/details/134674783
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_27880.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!