在Python3.0中处理web请求6-简单的模板引擎

今天放假在家,外面又在下雨,闲来无事,写了个简单的模板引擎,其实也不算什么模板,只是把嵌在html里的python代码解释成嵌入在python里的html代码,仅此而已,代码也很简陋,纯粹个人娱乐

以下是示例代码:

from web.render import SimpleHTMLRender
from socketserver import ThreadingMixIn
from wsgiref.simple_server import WSGIServer

render = SimpleHTMLRender("F:/test/")
class ThreadingWSGIServer(ThreadingMixIn,WSGIServer):
    pass

def application(env,start_response):
    start_response("200 OK",[("Content-Type","text/html;charset=UTF-8")])
    return render.hello(name="phyeas")

if __name__=="__main__":
    from wsgiref.simple_server import make_server
    httpd=make_server('',8080,application,server_class=ThreadingWSGIServer)
    print("Http Service on port 8080....")
    httpd.handle_request()

 需要在F:/test目录下放置一个叫hello.html的文件。文件内容是:

<%def render(name):%>
Hello <%=name%>!

 当然了,路径和文件名可以自定

输出结果就是 Hello phyeas!(当然可以改成你的名字啦)

运行后将生成一个hello.py文件和hello.pyc文件,前面是由SimpleHTMLRender生成的,后面是导入到程序里python自动编译的结果

核心代码:

def render(self, fpath, *args, **kwargs):
        if os.path.exists(fpath[0:-5]+".py") or os.path.exists(fpath[0:-5]+".pyc"):
            if os.path.dirname(fpath) not in sys.path:
                sys.path.append(os.path.dirname(fpath))
            py_f_path=fpath[0:-5]+".py" if os.path.exists(fpath[0:-5]+".py") else fpath[0:-5]+".pyc"
            create_new_file=False
            if os.stat(fpath).st_mtime>os.stat(py_f_path).st_ctime:#如果html文件的修改时间大于python文件的创建时间,就重新创建
                with open(fpath,encoding="UTF-8") as f:
                    parseHTML2Py(f)
                create_new_file=True
            fname=os.path.split(fpath)[1][:-5]#获取文件名 
            import_statement="import "+fname
            if import_statement not in imports or create_new_file:#创建新文件时重新import
                exec(import_statement)#导入模块
            if fname+"_real_func" not in self.render_functions or create_new_file:#创建新文件时重新绑定函数
                self.render_functions[fname+"_real_func"]=eval(fname+".render")#获取出函数绑定
            return getattr(self,fname+"_real_func")(*args,**kwargs)
        else:
            with open(fpath,encoding="UTF-8") as f:
                parseHTML2Py(f)
            return self.render(fpath,*args,**kwargs)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值