django学习笔记1

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上运行,并根据请求路径返回相应的内容。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javatack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值