• web框架推导过程


    web框架推导过程

    前端<----------->后端<---------->数据库
    

    1 纯手撸web框架

    1.1 前置知识点

    # HTTP协议
    """
    网络协议
    HTTP协议				数据传输是明文
    HTTPS协议				数据传输是密文
    websocket协议		数据传输是密文
    
    
    四大特性
    	1.基于请求响应
    	2.基于TCP、IP作用于应用层之上的协议
    	3.无状态
    	4.短/无链接
    
    数据格式
    	请求首行
    	请求头
    	
    	请求体
    
    响应状态码
    	1XX
    	2XX			200
    	3XX			
    	4XX			403 404
    	5XX			500
    """
    

    1.2 实现思路

    # 如何做到后缀的不同返回不同的内容
    # 1.拿到用户输入url网址的后缀 	2.做判断 返回对应的html数据
    
      
    # 不足之处
    1.代码重复(服务端代码所有人都要重复写)
    
    2.手动处理http格式的数据 并且只能拿到url后缀 其他数据获取繁琐
    (数据格式一样处理的代码其实也大致一样 重复写)
    
    3.并发的问题
    

    2 半手撸web框架(借助于wsgiref模块)

    2.1 wsgiref模块

    通过wsgiref模块

    便捷的建立服务端,专注于写核心的业务逻辑代码(视图函数以及url与视图函数的对应关系)

    """
    urls.py						路由与视图函数对应关系
    views.py					视图函数(后端业务逻辑)
    templates文件夹		专门用来存储html文件
    """
    # 按照功能的不同拆分之后 后续添加功能只需要在urls.py书写对应关系然后取views.py书写业务逻辑即可
    
    

    2.2 动静态网页

    2.2.1 动静态网页的定义

    """
    静态网页
    	页面上的数据是固定的 万年不变
    	
    动态网页
    	数据是实时获取的
    	eg:
    		1.后端获取当前时间展示到html页面上
    		2.从数据库中获取数据,展示到html页面上
    """
    

    2.2.2 动态网页制作

    # 1.后端获取当前时间展示到html页面上
    import datetime
    def get_time(env):
        current_time = datetime.datetime.now().strftime('%Y-%m-%d %X')
        # 如何将后端获取到的数据"传递"给html文件?
        with open(r'templates/03 mytime.html','r',encoding='utf-8') as f:
            data = f.read()
            # data就是一堆字符串
        data = data.replace('dwadasdsadsadasdas',current_time)   
        # 在后端将html页面处理好之后再返回给前端
        return data
    
    
    
    
    # 2.后端获取数据库中数据展示到前端页面
    # 将一个字典传递给html文件 并且可以在文件上方便快捷的操作字典数据
    from jinja2 import Template
    def get_dict(env):
        user_dic = {'username':'jason','age':18,'hobby':'read'}
        with open(r'templates/04 get_dict.html','r',encoding='utf-8') as f:
            data = f.read()
        tmp = Template(data)
        res = tmp.render(user=user_dic)
        # 给get_dict.html传递了一个值 页面上通过变量名user就能够拿到user_dict
        return res
    

    2.2.3 模版语法之Jinja2模块

    pip3 install jinja2
    """模版语法是在后端起作用的"""
    
    # 模版语法(非常贴近python语法)
    {{ user }}
    {{ user.get('username')}}
    {{ user.age }}
    {{ user['hobby'] }}
    
    
    {% for user_dict in user_list %}
                            <tr>
                                <td>{{ user_dict.id}}</td>
                                <td>{{ user_dict.username}}</td>
                                <td>{{ user_dict.password}}</td>
                                <td>{{ user_dict.hobby}}</td>
                            </tr>
    {% endfor%}
    

    3 自定义简易版本web框架请求流程

    用户输入网址--->wsgiref模块的服务端接收数据并处理--->得到数据(字典形式)--->获取对应数据
    																	  |
    网络传输至用户浏览器<---将数据交给wsgiref的服务端,进行封包<-----通过url与视图函数的对应关系获取响应数据
    

    3.1 wsgiref模块的作用

    """
    wsgiref模块
    	1.接收请求的时候 解析http格式的数据 并封装成大字典
    	2.返回响应的时候给数据打包成符合http格式 再通过网络传输给浏览器
    """
    
  • 相关阅读:
    并行fp-growth图解(mahout)
    Sqoop的安装与使用
    深入理解Hadoop集群和网络
    datanode与namenode的通信原理
    Hadoop添加节点datanode(生产环境)
    Hadoop中HDFS工作原理
    实现hadoop中的机架感知
    hadoop集群监控工具Apache Ambari安装配置教程
    sdn测量综述
    SDN测量论文粗读(三)9.24
  • 原文地址:https://www.cnblogs.com/achai222/p/12953562.html
Copyright © 2020-2023  润新知