动态网页:jinja2的template 和render方法 3

前面我们已经学习到了,前端页面可以将一些请求,数据,通过post 或者get请求,发送给后端,后端通过wsgiref模块获取到一个env的大字典获取到所有的这些数据,现在,我们将学习一种jinja2模块,可以通过templata实例化一个类,给这个类传一个html文件内容,文件内容也就是前端页面可以通过一些模板语法获取到这些后端产生的数据,这就实现了前后端数据的交互

具体做法的代码看下面的例子:

主程序:

from wsgiref.simple_server import make_server
# from urls import url
# from views import *
from jinja2 import Template
## jinja2是一个模板语法,专用模块
import pymysql
import time


##这里的env就是一个大字典,里面的信息是HTTP协议之前传过来的,
# 经过wsgiref处理之后将所有的信息转化成一个大字典
def error(env):
return '404'

def get_time(env):
with open(r'E:\周末四期\day19\代码\day19\第二部分动态网页\get_time.html','r',encoding='utf-8') as f:
data = f.read()
current_time = time.strftime('%Y-%m-%d %X')
res = data.replace('@@time@@',current_time)
return res


def get_user(env):
user_dict = {'username':'jason','password':'123','hobby':['read','work']}
# user_dict = {'hahhha'}
with open('E:\周末四期\day19\代码\day19\第二部分动态网页\get_user.html','r',encoding='utf-8') as f:
data = f.read()
from jinja2 import Template
tmp = Template(data) # 这个Templata是jinja2中的一个类,传一个data实例化一个对象
res = tmp.render(data1=user_dict)
# 将user_dict传递给前端页面 前端页面用过变量名data1就能够拿到user_dict字典
##这里将data1通过这个rendder 方法传过去,前端页面就可以通过{{data1}}的方法获取了
return res


def get_data(env):
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '654321',
database = 'db666',
charset = 'utf8',
autocommit = True
###自动提交
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute('select * from user')
res = cursor.fetchall()
# print("获取到的数据是:")
# print(res)

with open(r'E:\周末四期\day19\代码\day19\第二部分动态网页\get_date_from_databases.html','r',encoding='utf8') as f:
data = f.read()
tmp = Template(data)
res1 = tmp.render(user_list = res) # [{},{},{}]
return res1

url = [
('/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)
server.serve_forever()


"""
动静态网页:
静态网页:数据是写死的,万年不变
动态页面:数据是实时获取的,一直在改变,比如数据库的数据,以及当前时间

模板渲染(雏形)
后端产生数据直接传递给前端页面,前端页面获取数据通过模板语法展示

模板语法:
{{ 变量名 }} 获取后端传递的数据,通过变量名

jinja2 模板语法 极为接近python语法
{{ data}}
{{{ data1.username }}
{{ data1.password }}
{{ data1.hobby }}

转载于:https://www.cnblogs.com/1832921tongjieducn/p/11391976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值