wsgiref模块与jinja2模块编写web框架
Posted luckinlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wsgiref模块与jinja2模块编写web框架相关的知识,希望对你有一定的参考价值。
wsgiref模块
from wsgiref.simple_server import make_server
# wsgiref本身就是个web框架,提供了一些固定的功能(请求和响应信息的封装,不需要我们自己写原生的socket了也不需要咱们自己来完成请求信息的提取了,提取起来很方便)
#函数名字随便起
def application(environ, start_response):
'''
:param environ: 是全部加工好的请求信息,加工成了一个字典,通过字典取值的方式就能拿到很多你想要拿到的信息
:param start_response: 帮你封装响应信息的(响应行和响应头),注意下面的参数
:return:
'''
start_response('200 OK', [('Content-Type', 'text/html'),('k1','v1')])
print(environ)
print(environ['PATH_INFO']) #获取的是请求路径
#输入地址127.0.0.1:8000,这个打印的是'/',输入的是127.0.0.1:8000/index,打印结果是'/index'
return [b'<h1>Hello, web!</h1>']
#和socketserver那个模块很像
httpd = make_server('127.0.0.1', 8080, application)
print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
jinja2字符串替换
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>个人介绍</h1>
<ul>
//jinja2的替换格式,对列表可以进行循环取值
% for i in hobby %
<li> i </li>
% endfor %
</ul>
</body>
</html>
#*************************
#python代码
from jinja2 import Template
def home(conn):
# % for i in hobby %
# <li> i </li>
# % endfor %
with open('08jinja2test.html', 'r',encoding='utf-8') as f:
data = f.read()
t = Template(data)
ret = t.render('hobby':['金钱','女人','金鑫'])//对HTMl进行替换
conn.send(ret.encode('utf-8'))
conn.close()
jinja2和wsgire框架编写
import socket, time
from wsgiref.simple_server import make_server
from jinja2 import Template
# 客户端通过根路径访问时,服务端返回HTML页面
def home(conn):
with open('test.html', 'r', encoding='utf-8')as f:
new = str(time.time())
s = f.read()
# 将获取的动态时间替换掉HTML页面中的时间,达到动态返回页面的效果
t = Template(s)
ret = t.render('hobby':['张达','猪繁育','力争'])
return ret.encode('utf-8')
# 当客户端通过CSS路径访问的时候,服务端返回CSS文件
def style(conn):
with open('style.css', 'rb')as f:
return f.read()
# 当客户端通过JS路径访问的时候,服务端返回CSS文件
def index(conn):
with open('test.js', 'rb')as f:
return f.read()
# 当客户端通过请求索要图片的时候,服务端返回图片
def png(conn):
with open('1.jpg', 'rb')as f:
return f.read()
# 当客户端发送请求索要,ico文件的时候,返回ioc文件
def ico(conn):
with open('wechat.ico', 'rb')as f:
return f.read()
def ind(conn):
with open('index.html', 'rb')as f:
return f.read()
# 定义一个路径和文件的对应列表,节省代码,
urlList = [('/', home), ('/style.css', style), ('/test.js', index), ('/wechat.ico', ico), ('/index', ind),
('/1.jpg', png)]
def app(envion,start_sponse):
#返回HTTP请求行
start_sponse('200 ok',[])
#获取请求路径
path=envion['PATH_INFO']
ret=None
for i in urlList:
if path==i[0]:
ret=i[1](1)
break
if ret:
return [ret]
else:
return [b'404']
httpd=make_server('127.0.0.1',8896,app)
httpd.serve_forever()
'''**************************************************'''
#前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<link rel="stylesheet" href="style.css">
<link rel="icon" href="http://www.jd.com/favicon.ico">
<script src="test.js"></script>
<style>
img
width: 500px;
height: 200px;
</style>
</head>
<body>
#循环读取hobby的数据
% for i in hobby %
<h1 id="d1">欢迎猪繁育在i来到繁育基地</h1>
% endfor %
#申明结束
<a href="/index">你大太阳</a>
<img src="1.jpg" alt="">
</body>
</html>
以上是关于wsgiref模块与jinja2模块编写web框架的主要内容,如果未能解决你的问题,请参考以下文章
仿Django框架-基于wsgiref模块和jinja2模块写一个简单的框架 主流框架简介 动静态网页 Python虚拟环境