python笔记(web框架 介绍)

一、http
关于HTTP协议:

  1. 浏览器往服务器发的叫 请求(request)

    请求的消息格式:
          请求方法 路径:HTTP/1.1\r\n
          K1:V1\r\n
          K1:V1\r\n
          \r\n
          请求数据
    
  2. 服务端往浏览器发的叫 响应(response)

    响应的消息格式:
          HTTP/1.1 状态码 状态描述符\r\n
          K1:V1\r\n
          K1:V1\r\n
          \r\n
          响应正文(HTML文件)
    

在这里插入图片描述
在这里插入图片描述
二、动态网页:

  1. 本质上都是字符串的替换
  2. 字符串替换发生在服务端

三、web本质:

  1. socket服务端与浏览器的通讯

  2. socket服务端和功能划分

    a、负责与浏览器收发消息(socket通信 可用第三方模块:wsgiref/uWsgi/gunicorn...)
    b、根据用户返回不同的路径执行不同的函数
    c、从HTML读取出内容,并且完成字符串的替换 (可用第三方模块:jinja2)
    
  3. 一个完整的请求流程:

        0.启动服务器端,等待客户端(用户的浏览器)来连接
        1.在浏览器地址栏输入URL,与服务器端建立链接,浏览器发送请求
        2.服务端收到请求消息,解析请求消息,根据函数和路径的对应关系,找到将要执行的函数
        3.执行函数,打开HTML文件,进行字符串替换,得到一个最终要返回的HTML内容
        4.按照HTTP协议的消息格式要求,把HTML内容回复给用户浏览器(发送响应)
        5.浏览器收到响应消息之后,按照HTML的规则渲染页面
        6.关闭连接
    

四、python中web框架的分类

  1. 按上面三个功能划分:

    1、框架自带a,b,c:Tornado
    2、框架自带b和c,使用第三方的a:Django
    3、框架自带b,使用第三方的a和c:flask
    
  2. 按另一个维度划分:

    1、Django:大而全(你做一个网站能用到的它都有)
    2、其他:flask(轻量级)
    

五、根据用户返回不同的路径执行不同的内容示例:
import socket

sk = socket.socket()
sk.bind((“127.0.0.1”,8080))
sk.listen(5)
while True:
conn,addr = sk.accept()

data = conn.recv(1024)
# 把收到的数据转成字符串类型
data_str = str(data,encoding="utf-8")   #bytes("xxxxx",encoding="utf-8")(把字符串转成bytes类型)
#用\r\n切割上面字符串
s1 = data_str.split("\r\n")
#用\r\n切割上面字符串
s2 = s1[0].split()
url = s2[1]

conn.send(b'http/1.1 200 OK\r\ncontent-type:text/html; charset=utf8\r\n\r\n')

# 不同的url返回不同的内容
if url == "/li/":
    conn.send(b'hello li!')
elif url == "/long/":
    conn.send(b'hello long')
else:
    conn.send(b'not find')

conn.close()
sk.close()

回应:b’GET / HTTP/1.1\r\n
Host: 127.0.0.1:8080\r\n
Connection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8\r\nAccept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n’

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41433183/article/details/88056792
今日推荐