首页 > 技术文章 > 调包侠

jhpy 2019-10-21 17:15 原文

调包侠

wsgiref模块

  • 该模块实现了上面两个手动的过程
  • 根据功能不同拆分不同的py文件
  • urls.py 只放路由(后缀名)以及视图函数对应的关系
  • views.py 放视图函数(函数,类)
  • templates 模板文件夹(一堆html文件)
  • 拆分完成之后 如果想要添加功能,你仅仅只需要在上面两个地方动手脚就可以了

知识盲区

函数名只要加括号 立即执行 ,优先级最高,
点开make_server 看源码 有返回值就定一个变量去接收

make_server 里面有三个参数 第一个是ID,第三个是函数名
作用分别主要为了实时监听该地址 只要有客户端来连接 统一交给run函数(env,response)去处理
启动服务端server.server_forever()

:param env: 请求相关的所有数据
:param response: 响应相关的所有数据

精髓:

主要是思想,拆分

先去导包

from wsgiref.simple_server import make_server# 导包
from urls import urls  # 后缀名和视图函数对象关系拆成一个文件夹
from views import *




def run(env,response):
    """
    :param env: 请求相关的所有数据
    :param response: 响应相关的所有数据
    :return:
    """
    response('200 OK',[])
    # print(env)
    current_path = env.get('PATH_INFO')
    # if current_path == '/index':
    #     # 很多业务逻辑代码
    #     return [b'index']
    # elif current_path == '/login':
    #     return [b'login']
    # else:
    #     return [b'404 error']
    # 先定义一个变量名 用来存储后续匹配到的函数名
    func = None
    # for循环 匹配后缀
    for url in urls:
        if current_path == url[0]:
            func = url[1]  # 一旦匹配成功 就将匹配到的函数名赋值给func变量
            break  # 主动结束匹配
    # 判断func是否有值  有可能一套降龙十八掌下来一个人也没打到
    if func:
        res = func(env)  # 执行匹配到的函数去请求
    else:
        res = error(env)
    return [res.encode('utf-8')]




if __name__ == '__main__':
    server = make_server('127.0.0.1',8080,run)
    # 实时监听该地址  只要有客户端来连接 统一交给run函数去处理
    server.serve_forever()  # 启动服务端

1571588892556

1571544944057

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>

无状态 对应的是cookie,session,token 意思就是记住你的名字

get请求

​ 没有请求体,也可以携带参数

post请求筛选 是携带数据的 px是排序拼音也是可以的 gj get请求也可以携带一些参数

​ post请求 用户登录

请求头 类似于开路先锋 提前告诉对方一些必要的信息,

get请求没有请求体.
wsgiref web服务网关接口 两点 .com 后面的指的是URL

动静态网页

静态网页

  • 数据是写死的,万年不变

动态网页

  • 数据是实时获取的
    • 后端获取当前时间展示到前端
    • 后端获取数据库中的数据展示到前端

疑问

	如何将后端获取的数据 传递给html页面

后端获取的数据 传递给html页面  >>>:  模板的渲染

jinja2  
pip3 install jinja2

模板语法(极其贴近python后端语法)
	<p>{{ user }}</p>
	<p>{{ user.name }}</p>
	<p>{{ user['pwd'] }}</p>
	<p>{{ user.get('hobby') }}</p>

	{% for user_dict in user_list %}
		<tr>
			<td>{{ user_dict.id }}</td>
			<td>{{ user_dict.name }}</td>
			<td>{{ user_dict.pwd }}</td>
		</tr>
	{% endfor %}

推荐阅读