zoukankan      html  css  js  c++  java
  • 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、其他

  • 相关阅读:
    Windows Phone 开发 MD5计算
    php 3des加密算法以及与java,.net,c#的交互的一致性
    <加密算法c#>——— 3DES加密之ECB模式 和 CBC模式
    Blend PathListBox 使用
    计算机的几种类型单词、快捷键
    【SQL Server】 数据定义语言(定义基本表、完整性约束实现、索引)
    【SQL Server】 数据查询语句
    【WindowsPhone】 独立存储
    终结,铭记
    Day 3,4,5
  • 原文地址:https://www.cnblogs.com/yb635238477/p/9362924.html
Copyright © 2011-2022 走看看