zoukankan      html  css  js  c++  java
  • 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格式 再通过网络传输给浏览器
    """
    
  • 相关阅读:
    个人作业——软件产品案例分析
    项目Beta冲刺(团队)随笔集
    【Alpha】随笔集合
    个人作业——软件工程实践总结作业
    用户调查报告
    项目Beta冲刺(团队)总结
    项目Beta冲刺(团队)第七天
    项目Beta冲刺(团队)第六天
    项目Beta冲刺(团队)第五天
    项目Beta冲刺(团队)第四天
  • 原文地址:https://www.cnblogs.com/achai222/p/12953562.html
Copyright © 2011-2022 走看看