wsgire模块的用法:升级版的django推导2

from wsgiref.simple_server import make_server
# from urls import url
# from views import *
from jinja2 import Template
import pymysql
import time


def index(env):
return 'index'


def reg(env):
return 'reg'


def login(env):
return 'login'


def error(env):
return '404'


def xxx(env):
return 'xxx'


def get_time(env):
with open('templates/show_time.html','r',encoding='utf-8') as f:
data = f.read()
current_time = time.strftime('%Y-%m-%d %X')
res = data.replace('sadklsajdkljsakld',current_time)
return res


def get_user(env):
user_dict = {'username':'jason','password':'123','hobby':[1,2]}
with open('templates/get_user.html','r',encoding='utf-8') as f:
data = f.read()
tmp = Template(data) # 实例化产生对象
res = tmp.render(data = user_dict) # 将user_dict传递给前端页面 前端页面用过变量名data就能够拿到user_dict字典
return res


def get_data(env):
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '123',
database = 'day19',
charset = 'utf8',
autocommit = True
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute('select * from userinfo')
res = cursor.fetchall()
with open('templates/get_data.html','r',encoding='utf8') as f:
data = f.read()
tmp = Template(data)
res1 = tmp.render(user_list = res) # [{},{},{}]
return res1


url = [
('/index',index),
('/reg',reg),
('/login',login),
('/xxx',xxx),

('/get_time',get_time),
('/get_user',get_user),
('/get_data',get_data)
]


def run(env,response):
response('200 OK', []) # 固定格式 不需掌握
print(env) # 将http格式的数据处理完毕 形成一个字典给你调用

current_path = env.get('PATH_INFO')
func = None
for url_tuple in url:
if current_path == url_tuple[0]:
func = url_tuple[1] # 如果路由匹配上了 就回去对应的函数
break
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)
"""
这个语句会一直监听这个IP的这个端口,一旦有请求来连接成功了,就会把这个请求传给
后面的那个函数,会自动加括号执行,如果后面放的是一个类,也会自动加括号,生成一个类
然后走一个 __call__的方法
就是对象加括号自动执行,就会自动走 __calll__ 这个方法, __call__方法就是这种时候自动被触发执行
拓展:
这种 __str__ __call__ 以双下线开头双下线结尾的方法 都是会在特定的条件下被触发执行,而不是主动触发
__ call__ 是在对象被加括号执行的时候自动触发
__str__ 是在对象被打印的时候自动触发

"""

server.serve_forever()

"""
总结:
1.这里的wsgire模块,就是将之前纯手写的Django框架中的socket部分,以及http数据处理的部分,封装了,现在就可以直接用这个
wsgire模块直接将这个来生成Django连接了,不需要自己手动处理那些连接问题以及数据处理的问题,而且之前基于字符串分割的数据处理
方式只能得到一个信息,就是url后面输入的 例如Index这个东西,但是这个模块,将HTTP所有返回的参数都转成了一个K:V的大字典,可以拿到
全部的信息,用户值需要根据这个查阅一下这个信息的格式获取那个信息的名字,就可以通过字典获取值的方式得到这个这个值,例如使用get方法
2.这个程序所有的代码都是写在一个文件中为,可以用文件导入的方式,将这个程序的代码拆分成几个

"""
原文地址:https://www.cnblogs.com/1832921tongjieducn/p/11390990.html