django框架

我们先来认识一下网络编程:

网络编程:

  OSI五层模型:

    应用层

    传输层

    网络层

    数据链路层

    物理层

socket:套接字,位于应用层和传输层的一个虚拟层,是一个接口。 

服务器(socket服务端)
    1.启动
    2.绑定IP和端口
    3.监听
    4.等待链接
    6.收到连接
    8.接收消息
    9.返回消息
浏览器(socket客户端)
    5. 发送连接
    7. 发送消息
    10.接收消息

这就是服务器和客户端通信的过程

HTTP协议简介

超文本传输协议(英文:Hyper Text Transfer Protocol,HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信。

HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

在浏览器地址栏键入URL,按下回车之后会经历以下流程:

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
  5. 释放 TCP连接;
  6. 浏览器将该 html 文本并显示内容。 

HTTP请求方法:

  GET          HEAD       POST   PUT  DELETE  TRACE  OPTION   CONNECT

  但是现阶段最重要的是 get,和post

HTTP请求格式

  

HTTP响应格式

  

1. HTTP协议:
        1.请求(浏览器发给服务端的消息——request)
            请求方法 URL 协议版本
            k1:v1
            k2:v2
            
            请求体        —— 》 可以有,可以没有 GET请求没有
        2. 响应(服务端返回给浏览器的消息——response)
            协议版本 状态码 状态码描述符
            k1:v1
            k2:v2
            Content-Type: text/html;charset=utf8;
            
            响应体        —— 》 HTML代码

1.什么是web框架?

    

根据URL中不同的路径返回不同的内容--函数进阶版 
"""  
  
import socket  
  
sk = socket.socket()  
sk.bind(("127.0.0.1", 8080))  # 绑定IP和端口  
sk.listen()  # 监听  
  
  
# 将返回不同的内容部分封装成不同的函数  
def index(url):  
    s = "这是{}页面XX!".format(url)  
    return bytes(s, encoding="utf8")  
  
  
def home(url):  
    s = "这是{}页面。。!".format(url)  
    return bytes(s, encoding="utf8")  
  
  
# 定义一个url和实际要执行的函数的对应关系  
list1 = [  
    ("/index/", index),  
    ("/home/", home),  
]  
  
while True:  
    # 等待连接  
    conn, add = sk.accept()  
    data = conn.recv(8096)  # 接收客户端发来的消息  
    # 从data中取到路径  
    data = str(data, encoding="utf8")  # 把收到的字节类型的数据转换成字符串  
    # 按
分割  
    data1 = data.split("
")[0]  
    url = data1.split()[1]  # url是我们从浏览器发过来的消息中分离出的访问路径  
    conn.send(b'HTTP/1.1 200 OK

')  # 因为要遵循HTTP协议,所以回复的消息也要加状态行  
    # 根据不同的路径返回不同内容  
    func = None  # 定义一个保存将要执行的函数名的变量  
    for item in list1:  
        if item[0] == url:  
            func = item[1]  
            break  
    if func:  
        response = func(url)  
    else:  
        response = b"404 not found!"  
  
    # 返回具体的响应消息  
    conn.send(response)  
    conn.close()  

2. web框架
        本质:socket服务端
        
        功能:
            1. socket收发消息        
            2. url和函数的对应关系,根据不同的URL执行不同函数
            3. 字符串的替换(模板渲染)
    3. web框架分类
        实现1、2、3的框架 ——》 tornado
        实现 2、3的框架,使用的第三方1  wsgiref  uwsgi  ——》 django
        实现 2 的框架     ——》 flask
        分类:
            1、django
            2、其他

原文地址:https://www.cnblogs.com/yb635238477/p/9362924.html