Django学习笔记(一)

概括

用户的浏览器(socket客户端)

3.客户端往服务端发送消息
6.客户端接受消息
7.关闭连接

网站的服务器(socket服务端)

1.启动,监听
2.等待客户端连接
4.服务端接受消息
5.服务端发送消息
7.关闭连接

浏览器和服务端通信都要遵循http协议详情见http协议(就是消息的格式要求)

关于HTTP协议

1.浏览器向服务端发叫 请求(request)

请求的消息格式:

img

2.服务端向浏览器发叫 响应(response)

HTTP/1.1 状态码 状态描述符\r\n

k1:v1\r\n

k2:v2\r\n

\r\n

响应正文

动态的网页

动态网页本质上都是字符串的替换,在服务端替换完再返回给浏览器。

总结:

1.web框架的本质

socket服务端与浏览器的通信

2.socket服务端功能划分

a. 负责与浏览器收发消息(socket通信)

 	# 获取客户端连接
    conn, _ = skt.accept()
    # 接受客户端发来的消息
    data = conn.recv(8096)
    data_str = str(data, encoding="utf-8")
    # print(data_str)
    l1 = data_str.split("\r\n")
    # print(l1[0])
    # 按照空格切割上面的字符串
    l2 = l1[0].split()
    url = l2[1]

    # 给客户端回复消息
    conn.send(b'http/1.1 200 ok\r\ncontent-type:text/html; charset=utf-8\r\n\r\n')

b. 根据用户访问的不同路径执行不同的函数

# 定义函数返回服务器回复的内容
def hanjiawei(url):
    with open("han.html","r",encoding="utf-8") as f:
        ret = f.read()
    # 得到替换后的字符串
    ret = ret.replace("@@xx@@",str(time.time()))
    return bytes(ret,"utf-8")


def xiaohu(url):
    with open("xiaohu.html", "rb") as f:
        ret = f.read()
    return ret

def f404(url):
    ret = "404 NotFound!"
    return bytes(ret, "utf-8")
	# 根据不同的url返回不同内容
for i in url_func:
    if url == i[0]:
        func = i[1]
        break
else:
    func = f404
response_str = func(url)
conn.send(response_str)

c. 从html读取出内容并且完成字符串的替换

ret = ret.replace("@@xx@@",str(time.time()))

3.python中Web框架的分类

按上面的三个功能划分:

1.框架自带a,b,c ——> tornado

2.框架自带b和c,使用第三方的a ---->Django

3.框架自带b,使用第三方的a和c ---->Flask

按另一个维度来划分:

1.Django ---->大而全
2.其他 ---->Flask 轻量级