关键词:
我们先从最简单的自动代码生成场景开始,先用不怎么智能的方法来实现这些基本功能。我们在这一节中,将使用Java中的JDBC技术,实现对数据库内容的增删改查操作,同时使用PHP中的Mysqli技术,实现同样的功能,通过这个具体的实例,让大家感觉一下,实际中的代码生成,究竟可以实现什么功能。
我们在具体讲数据库获取代码生成之前,我们先来熟悉一下Jinja2的语法知识。我们以Jinja2应用的典型场景为例,来看一下,Jinja2怎样动态通过模板文件,生成标准的HTML文件,从而实现Web应用中的模板技术。
我们为了控制项目中用到的库文件,不与系统中的库文件冲突,我们先建立项目自己的虚拟环境。在anaconda下面,建立虚拟环境最方便的方法是使用conda命令,假设我们要建立的虚拟环境名称为cgai(Code Generation by Artificial Intelligence),则命令为:
conda create -n cgai
接下来,我们激活这个虚拟环境:activate cgai,如果我们要关闭这个虚拟环境,只需运行:deactivate cgai即可。激活了虚拟环境之后,在命令提示符前会有(cgai)提示。
我们先在根目录下建立exp目录,专门用于存放我们的实验性代码,截至目前为止,程序的目录结构应该为类似如下所示的结构:
我们先来写一个最简单的Jinja2测试程序exp/t001.py,如下所示:
import sys
sys.path.append('./libs/jinja')
from jinja2 import Template
template = Template('Hello {{ name }}')
rst = template.render(name='Yt')
print(rst)
然后我们来编写程序入口主文件app_main.py:
import exp.t001
运行程序:python app_main.py
则系统应该可以打印出昨天我们的例子中打印的内容。这就说明我们新的目录结构是正确的。
下面我们来看一个实际一点儿的例子,在这个例子中,我们要显示用户王三购物车中的内容,假设购物车中有一个产品列表,每个产品包括产品名称、数量和价格,我们想要在HTML页面上显示这个产品的列表。
如果使用Jinja2的话,我们第一步就是生成一个模板文件,如下所示:
<!doctype html>
<html lang="cn">
<head>
<meta charset="UTF-8" />
<title>{{ title }}</title>
<meta name="description" content="{{ description }}" />
</head>
<body>
<div id="content">
<p>欢迎{{ userName }}!您的购物车:</p>
<ul>
{% for item in items -%}
<li>{{ item.name }}---{{ item.quantity }}---{{ item.price }}---{{ item.quantity * item.price }}</li>
{% endfor -%}
</ul>
</div>
</body>
</html>
下面我们在exp/t001.py中利用jinja2解析模板文件,生成正确的HTML文件,如下所示:
import sys
sys.path.append('./libs/jinja')
import codecs
from jinja2 import Template
import jinja2 as jinja2
#template = Template('Hello {{ name }}')
#rst = template.render(name='Yt')
#print(rst)
templateLoader = jinja2.FileSystemLoader( searchpath="d:/" )
templateEnv = jinja2.Environment( loader=templateLoader )
TEMPLATE_FILE = "d:/abiz/cgai/exp/p001.jt"
template = templateEnv.get_template( TEMPLATE_FILE )
items = [
{"name": "笔记本电脑", "quantity": 1, "price": 5900.00},
{"name": "iPhone7 plus", "quantity": 1, "price": 7900.00},
{"name": "编程入门", "quantity": 3, "price": 59.00}
]
templateVars = { "title" : "我的购物车",
"description" : "中国最大电子商务平台,京东商城、天猫商城的终结者",
"userName" : "王三",
"items": items
}
outputText = template.render( templateVars )
print(outputText)
outFile = codecs.open('d:/abiz/cgai/exp/p001.html', 'w', 'utf-8')
outFile.write(outputText)
outFile.close()
这段代码的结构还是比简单的,程序首先初始化Jinja2的环境,获取到模板文件。然后我们定义购物车内容为items,最后定义页面所用到的变量templateVars,最后调用jinja2来解析模板文件,对变量表达式、逻辑控制、循环结构等进行替换,生成正确的HTML文件。这里需要注意的一点是,我们在Windows下,文件的缺省编码为Ascii,所以我们在写文件时,需要显示的指定文件编码为utf-8。
运行程序:python app_main.py后,会得到p001.html文件,内容如下所示:
<!doctype html>
<html lang="cn">
<head>
<meta charset="UTF-8" />
<title>我的购物车</title>
<meta name="description" content="中国最大电子商务平台,京东商城、天猫商城的终结者" />
</head>
<body>
<div id="content">
<p>欢迎王三1!您的购物车:</p>
<ul>
<li>笔记本电脑---1---5900.0---5900.0</li>
<li>iPhone7 plus---1---7900.0---7900.0</li>
<li>编程入门---3---59.0---177.0</li>
</ul>
</div>
</body>
</html>
通过这个简单的例子,我们可以看到,Jinja2代码生成的能力还是很强的,在下一节中,我们将带领大家利用这一技术,利用模板技术,自动生成数据库访问代码。
用python如何实现智能合约?(代码片段)
...合约1.是什么?智能合约是一种由计算机程序编写的自动化合约,它可以在没有第三方干预的情况下执行交易和契约条款。智能合约使用区块链技术实现,可以实现不同的功能,例如交易、投票、代币发放和数据... 查看详情
2021高校大数据挑战赛-智能运维中的异常检测与趋势预测2方案设计与实现-python(代码片段)
...中的异常检测与趋势预测】2方案设计与实现-Python【完整代码下载823316627Bandeng的github】1问题一1.1算法过程描述 查看详情
python如何获取页面上某个元素指定区域的html源码?(代码片段)
...iddler找该元素所在网页和属性3.2.4修正后的源码1需求来源自动化测 查看详情
人工智能——笔记(代码片段)
人工智能数据类型几个基础方法/函数说明:数据处理需要更加精准的数据描述,下面几个方法是对tump、ist、dict的补充:1.namedtuple将元组改为坐标的函数???将元组改为可用索引的对象元组本身用键取,不能索引2.deque高效实... 查看详情
层次聚类算法的实现(代码片段)
...程大学电子信息学院,2021级硕士研究生,张宏伟人工智能课题组研究方向:机器视觉与人工智能电子邮件:2425613875@qq.com2.层次聚类算法介绍2.1层次聚类算法原理聚类就是对大量未知标注的数据集,按... 查看详情
层次聚类算法的实现(代码片段)
...程大学电子信息学院,2021级硕士研究生,张宏伟人工智能课题组研究方向:机器视觉与人工智能电子邮件:2425613875@qq.com2.层次聚类算法介绍2.1层次聚类算法原理聚类就是对大量未知标注的数据集,按... 查看详情
python调用百度api实现人脸融合(代码片段)
...安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组研究方向:机器视觉与人工智能电子邮件:1461004501@qq.com2.人脸融合介绍简单来说就是对两张人脸进行融合处理,使生成的人脸同时具备两张... 查看详情
基于用户评论情感分析详细设计与技术实现(代码片段)
...一、技术架构二、分析服务器构建1.1创建flask项目1.2编写数据库连接脚本,获取用户评论数据;1.2.1引入库1.2.2连接数据库获取数据1.2.3测试1.3编写情感分析脚本1.3.1引入库1.3.2情感分直方图实现1.3.3态度比例图;1.3.4用... 查看详情
基于用户评论情感分析详细设计与技术实现(代码片段)
...一、技术架构二、分析服务器构建1.1创建flask项目1.2编写数据库连接脚本,获取用户评论数据;1.2.1引入库1.2.2连接数据库获取数据1.2.3测试1.3编写情感分析脚本1.3.1引入库1.3.2情感分直方图实现1.3.3态度比例图;1.3.4用... 查看详情
[c++]智能指针(代码片段)
目录1.为什么需要智能指针?2.RAII(资源获取及初始化)2.1RAII方式的原理2.2重大问题2.3智能指针原理3.C++98auto_ptr(不要用)3.1解决浅拷贝的方式一3.2解决浅拷贝的方式二4.C++11unique_ptr4.1管理的资源多样如何释放4.2模拟实现5.C&... 查看详情
[c++]智能指针(代码片段)
目录1.为什么需要智能指针?2.RAII(资源获取及初始化)2.1RAII方式的原理2.2重大问题2.3智能指针原理3.C++98auto_ptr(不要用)3.1解决浅拷贝的方式一3.2解决浅拷贝的方式二4.C++11unique_ptr4.1管理的资源多样如何释放4.2模拟实现5.C&... 查看详情
3配置中心(代码片段)
...理,而且还可以实现当配置文件发生变化的时候,系统会自动更新获取新的配置。将配置文件放入git或者svn等服务中,通过一个ConfigServer服务来获取git或者svn中的配置数据,二其他服务需要配置数据 查看详情
毕业设计-题目:基于单片机的智能小车-嵌入式物联网本科毕设(代码片段)
...化设计的电子产品可以按照预先设定的模式在一个环境里自动运作,不需要人为的管理,可应用于科学勘探、环境监测、智能家居等方面。基于单片机的智能小车控制就是其中的一个体现。本设计实现了一种基于51单片机... 查看详情
ns3-对象框架之智能指针(代码片段)
...引用计数的智能指针系统,可以使得对象在不再被使用时自动被删除。使用一个Ref()方法在有新的指针指向对象时,将其内部的计数加1;而在指针不再指向时调用UnRef()方法,将计数器减1。当计数器为0的时候,说明没有任何指针... 查看详情
[pytorch系列-58]:循环神经网络-词向量的自动构建与模型训练代码示例(代码片段)
...型训练2.5模型测试第1章 代码编写前的准备1.1理论前提[人工智能-深度学习-56]:循环神经网络-词向量的自动构建与模型训练_文火冰糖(王文兵)的博客-CSDN博客作者主页(文火冰糖的硅基工坊):文火冰糖(王... 查看详情
机器学习之基础知识(全)(代码片段)
目录1.机器学习概述1.1人工智能概述1.1.1人工智能使用场景1.1.2人工智能小案例1.2 人工智能发展历程1.2.1图灵测试1.2.2发展历程1.2.3小结1.3人工智能主要分支1.3.1 人工智能、机器学习和深度学习1.3.2主要分支介绍1.3.3人工智能发展... 查看详情
基于mobilenet-v3和yolov5的餐饮有害虫鼠识别及防治系统的设计与实现(代码片段)
...理者们不变的追求与目标。随着科技的发展与进步,人工智能成为了文明社会的重要产物,并逐渐应用于日常生活中的方方面面。基于此,设计并开发出一款可以有效预防虫鼠害的系统对于提升管理效率及卫生服务质... 查看详情
基于mobilenet-v3和yolov5的餐饮有害虫鼠识别及防治系统的设计与实现(代码片段)
...理者们不变的追求与目标。随着科技的发展与进步,人工智能成为了文明社会的重要产物,并逐渐应用于日常生活中的方方面面。基于此,设计并开发出一款可以有效预防虫鼠害的系统对于提升管理效率及卫生服务质... 查看详情