`
phyeas
  • 浏览: 161492 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

在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)

 

分享到:
评论
2 楼 phyeas 2009-04-12  
.
1 楼 LinuxForShare 2009-04-10  
经过几天的努力,今天终于跑通了python的一个程序,不易啊
下载软件费了老半天,安装也在不停的安装卸载多次
不过现在用eclipse开发还是有问题,还会报找不到django模块,在命令行里运行却没有问题,所以怀疑是python没安装好吧,我装的是python2.6的
网上找了几天也没解决,暂时先不管了,先学习学习文档再说

相关推荐

    Djangoiptvchannel:Django IPTV频道

    django&gt; = 2.1.6,&lt;3.0 Python 3.8版本 图书馆 -请求-请求 执行 服务器网站 iptv-python-convert \ server_web.py默认端口80 服务器API / REST iptv-python-convert \ iptv_api \ run_api.py默认端口8000

    LeetCode:使用Python解决Leetcode的问题

    使用Python 3.0解决Leetcode问题 入门 每个文件的解决方案和输出示例都有leet代码问题 先决条件 Python 3.0 Give examples 正在安装 一系列循序渐进的示例,告诉您如何运行开发环境 说出步骤将是什么 Give the ...

    aiohttp-swagger3:使用swagger规范3.0进行swagger文档浏览和验证aiohttp请求的库

    用于通过不同的UI后端显示swagger文档以及使用swagger规范3.0(称为OpenAPI3)可选地验证/解析aiohttp请求的软件包。 支持的UI后端 如果仅需要验证而无法查看文档,则可以使用多个UI后端,或者可以完全禁用UI后端。 ...

    ipmon:IP地址监视警报

    需要安装Python 3.0+,您可以在找到安装程序 2)安装Python要求 在此仓库的主目录中,运行以下命令: pip install -r requirements.txt 3)配置 请按照以下说明运行Web服务器,并在服务器运行后导航至该服务器。 ...

    pycdbinvest:使用Flask API和VueJs Frontend Client的Python项目

    目录安装使用Python3.7来创建虚拟环境'venv' $ virtualenv -p python3.7 venv$ source venv/bin/activate安装要求$ pip install -r requirements为了在localhost或AWS Lambda和AWS API Gateway上部署Web应用程序,请...

    Ajax异步请求实战案例讲解

    本动手实战项目介绍了如何在前端使用Ajax向后端请求数据并展示在Web页面,并且在Web页面提供了“增、删、查、改”的功能。 ? 一、融汇贯通 将Python语言和Django基础知识,以实际应用为媒介,有机组织、融汇贯通。让...

    sixpack:Sixpack是一个语言无关的AB测试框架

    第一,Sixpack服务器,是负责响应Web请求。 第二,Sixpack的Web,可用于跟踪和作用于你的A / B测试的web仪表板。 Sixpack-web是可选的。要求Redis&gt; = 2.6 Python&gt; = 2.7(3.0未测试,欢迎拉取请求)入门要开始,请...

    guest:发布会签到系统

    基于Django的简易发布会签到系统。 Django3.0发布,本项目代码与出版图书保持一致,想使用Django 3.0的请移步到: 介绍: 本项目为一书中项目代码。代码实现的一个较大的完整的发布会签到系统。 它包含功能: 完整...

    flask-apps:我可以在其中存储烧瓶应用程序的巨大文件夹

    是Python中的轻量级WSGI Web应用程序框架。 它旨在让您快速,轻松地入门。 是Flask之上的框架,可自动处理使用OpenAPI(以前称为Swagger)定义的HTTP请求,同时支持该规范的v2.0和v3.0。 是一个ORM / OD

    Django快速入门教程

    django是一个基于python的开源web框架,旨在简化开发者开发过程,使得开发起来快速简洁。采用了MVT软件设计模式(Model模型、View视图、Template模板) 这里MTV模型 Template呈现给用户,用户通过Template发送请求给...

    awesomenbadata-api:OpenAPI Flask应用程序,可将数据提供给measuredstudios.com

    是Python中的轻量级WSGI Web应用程序框架。 它旨在让您快速,轻松地入门。 可扩展性的。 是一个ORM / ODM /与框架无关的库,用于将复杂的数据类型(例如对象)与本机Python数据类型之间进行转换。 是Flask和棉花糖...

    意见:Voilà将Jupyter笔记本电脑变成独立的Web应用程序

    安装Voilà可以与conda软件包管理器一起安装conda install -c conda-forge voila或从pypi pip install voilaJupyterLab预览扩展Voilà提供了JupyterLab扩展,可在侧窗格中显示笔记本的Voilà预览。 与JupyterLab 3.0...

    Syntaxtic !「Syntaxtic!」-crx插件

    此扩展名主要用于查看托管在可通过Web访问的版本控制系统中的文件,该系统本身不提供突出显示功能,但使用范围肯定不止于此。 现在,可以从扩展选项页面中选择各种颜色主题和默认大小。 支持的语言:Actionscript(....

    heatflask:Strava活动浏览器

    这是Heatflask Web应用程序的服务器端和客户端代码存储库,当前在。执照该项目已获得GNU通用公共许可证v3.0 许可。 任何用户都可以自由地提出修改建议,派生此仓库和/或发出请求请求。 您不能随意在可以赚钱的项目...

    jdnp3:一个纯 Java DNP3 库。-开源

    该项目旨在提供符合 DNP3 2 级标准的实用程序,包括: - 符合 2 级 DNP3 标准的堆栈 - 基于 Web 的测试实用程序 - 用于测试网页的 Python 远程控制 到目前为止,重点一直围绕外站功能。 将来会包含主站功能。 要求...

Global site tag (gtag.js) - Google Analytics