django学习笔记1
django学习笔记11.socket实现服务端2.服务端根据不同的url相应不同内容3.wsgiref创建服务器
1.socket实现服务端
import socket server = socket.socket() server.bind(('127.0.0.1',8080)) server.listen(5) while True: conn,addr = server.accept() data = conn.recv(1024) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # conn.send(b'heLLo world') # conn.send(b'<h1>heLLo python</h1>') with open('a.txt','rb')as f: conn.send(f.read()) conn.close() conn 是一个表示客户端与服务器之间的通信连接的变量 server 表示服务端 server.accept() 方法:服务端接受客户端的连接请求,并返回一个包含连接对象和客户端地址的元组 (conn, addr)。 这里的 conn 是代表客户端与服务器建立的套接字连接。通过这个连接,服务器可以接收来自客户端的数据(使用 conn.recv())并向客户端发送数据(使用 conn.send())。 在循环中,服务器会接收来自客户端的数据,然后向客户端发送一个 HTTP 响应头(HTTP/1.1 200 OK\r\n\r\n),表明请求成功。接着,服务器会读取名为 'a.txt' 的文件,并将文件内容通过 conn.send() 发送给客户端。最后,服务器关闭与客户端的连接(conn.close())。 需要注意的是,在这段代码中,只处理了一个客户端连接。如果有多个客户端连接,服务器应该能够同时处理它们,可以通过多线程、多进程或异步编程来实现。
2.服务端根据不同的url相应不同内容
while True: conn,addr = server.accept() data = conn.recv(1024) current_path = data.split(' ')[1] print(current_path) if current_path ='/index/': conn.send(b'index') elif current_path ='/login/' conn.send(b'login') elif current_path ='/baidu/': with open('b.html','rb')as f: conn.send(f.read()) conn.close()
请求数据格式
请求首行(http版本,请求方式)+ 请求头(键值对)+ \r\n + 请求体(get/post)
相应数据格式
相应首行(http版本,标识码【也就是数字】 )+ 响应头 + \r\n + 相应体
3.wsgiref创建服务器
from wsgiref.simple_server import make_server def run_server(environ,start_response): #environ:请求相关的所有数据,是一个字典 #start response:响应相关的所有数据 start_response('200 OK',[]) print(environ) print(environ['PATH_INFO']) url = environ['PATH_INFO'] #根据不同的路径返回不同的内容 #定义一个保存将要执行的函数名的变量 func = None for i in list1: if i[0]=url: func = i[1] break if func: response func(url) else: response b'404 not found' return [response,] if name =='main': httpd = make_server('127.0.0.1',8080,run_server) httpd.serve_forever()#启动服务端 run_server(environ, start_response) 函数: 这是一个WSGI应用程序函数。当有HTTP请求进来时,WSGI服务器会调用该函数,将请求相关的信息以字典environ和响应相关的信息函数start_response作为参数传入。 environ 参数是一个字典,包含了请求相关的所有数据,如请求路径、请求方法、查询字符串等信息。 start_response 参数是一个函数,用于设置响应的状态码和响应头。 在run_server函数中,首先通过environ['PATH_INFO']获取请求的路径,并根据路径选择合适的处理函数(如login()和index())。如果请求的路径在list1中存在对应的处理函数,则调用该函数生成响应内容,否则返回404 not found作为响应内容。 主进程函数: 在if __name__ == '__main__': 语句块中,使用make_server函数创建一个简单的WSGI服务器。make_server函数的参数依次是服务器的地址、端口号和WSGI应用程序函数(即上面的run_server函数)。然后,通过httpd.serve_forever()启动服务器,使其一直监听并处理来自客户端的请求,直到手动停止服务器。这样,服务器就在127.0.0.1:8080上运行,并根据请求路径返回相应的内容。