• 动态网页: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 }}
    {{ 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>


    """
  • 相关阅读:
    谈一谈对象池SafeObjectPool能干什么
    .net core 程序退出事件
    .NETCore 快速开发做一个简易商城
    Git创建子分支,合并分支并提交
    Vue项目中关闭eslint的方法
    Missing space before function parentheses
    单引号变双引号 格式化去掉分号
    Docker Swarm搭建多服务器下Docker集群
    Asp.Net Core中服务的生命周期选项区别和用法
    KnockoutJS-模板绑定
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/11391976.html
Copyright © 2020-2023  润新知