码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2019-08-22 00:35:30      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:turn   http协议   com   head   dict   doc   通过   none   直接   

前面我们已经学习到了,前端页面可以将一些请求,数据,通过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 }}
{{ data1.hobby.0 }}
{{ data1.hobby.1 }}
"""

"""
附带的html文件:
E:\周末四期\day19\代码\day19\第二部分动态网页\get_date_from_databases.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<user_list>
{{ user_list }}
{#{{ user_list }}#}
{#</user_list>#}
</html>

E:\周末四期\day19\代码\day19\第二部分动态网页\get_time.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>get_time</title>
</head>
<body>

<h1>@@time@@</h1>
<!--先写一个时间,固定写死,之后再读取这个替代掉这个时间 -->
</body>
</html>

E:\周末四期\day19\代码\day19\第二部分动态网页\get_user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ data1 }}
{{ data1.username }}
{{ data1.password }}
{{ data1.hobby }}
{{ data1.hobby.0 }}
{{ data1.hobby.1 }}

</body>
</html>


"""

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

标签:turn   http协议   com   head   dict   doc   通过   none   直接   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!