ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

web框架的推导

2021-10-18 09:32:40  阅读:129  来源: 互联网

标签:web 推导 框架 wsgiref html dict user data 页面


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格式 再通过网络传输给浏览器
"""

标签:web,推导,框架,wsgiref,html,dict,user,data,页面
来源: https://www.cnblogs.com/MRPython/p/15419210.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有