Python自定义web框架Jinja2

Posted Root用户

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python自定义web框架Jinja2相关的知识,希望对你有一定的参考价值。

WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。

python标准库提供的独立WSGI服务器称为wsgiref。

标准Web框架

#!/usr/bin/env python
#coding:utf-8
from wsgiref.simple_server import make_server

def RunServer(environ, start_response):
    start_response(\'200 OK\', [(\'Content-Type\', \'text/html\')])
    return \'<h1>Hello, web!</h1>\'
if __name__ == \'__main__\':
        httpd = make_server(\'\', 8000, RunServer)
        print "Serving HTTP on port 8000..."
httpd.serve_forever()

  

自定义Web框架

from wsgiref.simple_server import make_server

def login():
    return \'login\'

def index():
    data = open(\'index.html\',\'r\').read()
    return data

url = (
    (\'/login/\',login),
(\'/index/\',index),
)

def RunServer(environ, start_response):
    start_response(\'200 OK\', [(\'Content-Type\', \'text/html\')])

    geturl = environ[\'PATH_INFO\']
    for item in url:
        if item[0] == geturl:
            return  item[1]()
    else:
        return \'404\'

if __name__ == \'__main__\':
    httpd = make_server(\'\', 8000, RunServer)
    print "Serving HTTP on port 8000..."
httpd.serve_forever()

  

 

MVC和MTV       代码堆放的归类

  MVC:Model、View、Controller        
                    model存放数据操作,view存放html文件,controller负责逻辑处理

  MTV:Model、Template、View
                     model存放数据操作,Template存放html文件,View负责逻辑处理

 

Django是 MTV模式


 

 

 

模板渲染jinja2

 

from wsgiref.simple_server import make_server
import time
from jinja2 import Template
import sys
reload(sys)
sys.setdefaultencoding(\'utf8\')    #//解决UnicodeDecodeError


def login():
    return \'login\'

def index():
    data = open(\'index.html\',\'r\').read()
    current_time = time.strftime(\'%Y-%m-%d %H:%M:%S\')
    template = Template(data)   #使用jinja2模板处理
    result = template.render(name=\'yangmv\',
                             age=\'18\',
                             current_time=current_time,
                             user_list=[\'wj\',\'sb\',],
                             num=1,
                             )

    return result.encode(\'utf-8\')

url = (
    (\'/login/\',login),
    (\'/index/\',index),
)

def RunServer(environ, start_response):
    start_response(\'200 OK\', [(\'Content-Type\', \'text/html\')])

    geturl = environ[\'PATH_INFO\']
    for item in url:
        if item[0] == geturl:
            return  item[1]()
    else:
        return \'404\'

if __name__ == \'__main__\':
    httpd = make_server(\'\', 8000, RunServer)
    print "Serving HTTP on port 8000..."
    httpd.serve_forever()

 

 

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <!--jinja2传值-->
    <h1>{{ name }}</h1>
    <h1>{{ age }}</h1>
    <h1>{{ current_time }}</h1>

    <!--jinja2实现for循环-->
    <ul>
        {% for item in user_list %}
            <li>{{item}}</li>
        {% endfor %}
    </ul>
    <!--jinja2实现if判断-->
    {% if num == 1 %}
        <h1>111</h1>
    {% else %}
        <h1>222</h1>
    {% endif %}
</body>
</html>

  

 

 

以上是关于Python自定义web框架Jinja2的主要内容,如果未能解决你的问题,请参考以下文章

Django框架简介

仿Django框架-基于wsgiref模块和jinja2模块写一个简单的框架 主流框架简介 动静态网页 Python虚拟环境

python 创建自定义函数Jinja2

XCTF-攻防世界CTF平台-Web类——16shrine(Flask框架之Jinja2模板渲染引擎查看app.config[‘FLAG‘])

XCTF-攻防世界CTF平台-Web类——16shrine(Flask框架之Jinja2模板渲染引擎查看app.config[‘FLAG‘])

XCTF-攻防世界CTF平台-Web类——16shrine(Flask框架之Jinja2模板渲染引擎查看app.config[‘FLAG‘])