一、web框架
- web 框架主要简化开发操作,所有的 web 框架的本质都是一个 socket 服务端; 用户通过浏览器进行访问数据,浏览器就是 socket 的客户端。
- h框架的关键组成部分:MVC 架构,路由(URL), 模本引擎(HTML) , 数据库(ORM) 中间件,静态资源管理器等
1、这里的是简单的网页发送和回应的代码:
这里要注意的是可能端口被占用等情况,需要改一下端口号,还有的就是这里需要重新创立一个py文件,不能在django框架下进行。
- 这里中文需要gbk,英文需要utf-8的编码
import socket
server = socket.socket()
# 可以设置的端口号:动态端口(1024~65535)
server.bind(('127.0.0.1', 10086))
server.listen(5)
while True:
sock, address = server.accept()
data = sock.recv(1024)
print(data)
'''
写到这里的时候进行运行代码,会使得无法响应:
127.0.0.1 发送的响应无效。
是因为服务端和客户端之间发送和接收数据的传输协议不同,
浏览器访问数据是通过 http 协议传输
通过 http 协议传输数据
响应报文
1、响应首行:HTTP 协议以及对应的版本号【HTTP/1.1】,响应状态码【200】 , 响应状态描述【OK】
2、响应头:数据键值对
3、空行:\r\n
4、响应体:我们要发送的数据
'''
sock.send('HTTP1.1 200 OK'.encode('utf-8'))
sock.send('\r\n\r\n'.encode('utf-8'))
sock.send('hello\r\n'.encode('utf-8'))
sock.send('阿宸好帅'.encode('gbk')) #这里都是要使用UTF-8编码整个响应
2、这里是通过获取url对其进行解析从而进行页面的切换
- 这里代码中的data的值是:GET /path/to/resource HTTP/1.1
- data.split(' ') 会将字符串分割成 ['GET', '/path/to/resource', 'HTTP/1.1']。
- [1] 获取的是 '/path/to/resource',这就是请求的 URL 路径。
import socket
server = socket.socket()
# 可以设置的端口号:动态端口(1024~65535)
server.bind(('127.0.0.1', 10086))
server.listen(5)
def index():
# 直接返回字节类型
return bytes('index 页面' , encoding='gbk')
def num():
# 直接返回字节类型
return bytes('num 页面' , encoding='gbk')
# 匹配 url 和 资源
url_dict = {
'/index' : index,
'/num' : num,
}
while True:
sock, address = server.accept()
data = sock.recv(1024).decode('utf-8')
url = data.split(' ')[1]
sock.send('HTTP1.1 200 OK'.encode('utf-8'))
sock.send('\r\n\r\n'.encode('utf-8'))
# 判断获取到的 url 在字段中是否存在
if url in url_dict:
# 存在调用对应的资源函数
func = url_dict[url]() #这里的是匹配对应的路由返回值
# 将数据发送到客户端
sock.send(func)
else:
sock.send(b'404')
# 浏览器访问资源:127.0.