文章目录
Django学习笔记(一)
概括
用户的浏览器(socket客户端)
3.客户端往服务端发送消息
6.客户端接受消息
7.关闭连接
网站的服务器(socket服务端)
1.启动,监听
2.等待客户端连接
4.服务端接受消息
5.服务端发送消息
7.关闭连接
浏览器和服务端通信都要遵循http协议详情见http协议(就是消息的格式要求)
关于HTTP协议
1.浏览器向服务端发叫 请求(request)
请求的消息格式:
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 轻量级