调包侠
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() # 启动服务端
<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 %}