查询网页的功能、结构和流程(2012.11.13python)

需求分析

  • 这个程序使用户能够在网页中输入模板,在数据库中查找模板匹配到的文本,并在文本中高亮显示匹配内容

使用的工具

程序主要是基于python的,用到了web.py、html设计、正则表达式、postgresql数据库管理系统、hash编码(MD5)、http协议中的资源传递方法GET和POST:

  • python是后台处理的工具:
    1. python中的web库包含了网页编程中很多功能强大的模块,可以使用 web.template.render('templates/')方法建立模板,并建立html文件放在templates文件夹中,使python 能够解释html文件,实现网页显示功能,GET和POST方法能够从网页中获取需要的资源;
    2. python中的正则表达式库re帮助python有效的处理文本和模板的查找匹配,能够对文本进行替换和修改,以满足不同的文本处理需求;
  • html语言完成网页页面的设计和数据传递
  • postgresql是关系型数据库管理系统,psycopg2 库支持python进行数据库操作,而且postgresql支持在数据库中的正则匹配
  • hash库hashlib完成文本编码工作,将文本编码成固定大小的hash码,在数据库中存储文本时,同时存储对应的hash码,由于hash码很短,字符串匹配时间段,能够帮助数据库很快的进行查找
  • 学习使用http协议能够帮我很好的理解网页前端和后台处理中数据传递的过程,函数GET和POST在数据传递中起到重要作用

实现功能

  1. 在网页url中用户能够以添加参数的方式查询数据库中特定id对应的文本,显示在网页中
  2. 用户可以在输入框中输入文本或正则表达式,点击提交按钮,可以在特定id的文本中进行正则匹配,输入可以是多段的,段与段之间使用多个'#'分开,提交后,模板在文本中高亮显示。如果模板有多段,则分别高亮显示,显示结果放在新的跳转网页中
  3. 用户也可以在输入框中输入查询文本,查询整个表中所有包含输入文本的id,并以超链接形式显示,超链接可以链接到对应id的查询页面,即第一步中的功能

结构组成

包括网页显示结构和数据库中的表结构:

  1. 网页页面组成:
    • 页面分为左右两栏,左边一栏用于显示文本
    • 右边一栏包括文本输入框和两个按钮
    • 按钮分别是提交按钮和查询按钮
  2. 数据库中的表的结构:
    • 表1中包括两个字段,文本字段和id字段,其中id字段是自增的
      Table "public.template_for_16_rule"
      ColumnTypeModifiers含义
      showtext text   存储原始文本
      id integer not null default nextval('test_id_seq'::regclass) 文本标号,主键

      Indexes:
      "test_pkey" PRIMARY KEY, btree (id)

    • 表2中的字段包括输入文本段、输入文本段对应正则表达式(上步中转换后的结果)、hash编码和id(自增),又添加了创建时间字段、更新时间字段和状态字段
      Table "public.template_for_16_rule"
      ColumnTypeModifiers含义
      intext text   用户输入文本
      pattern text   正则模板
      hashmd5 text   hash编码,有唯一属性
      id integer not null default nextval('userinput_id_seq'::regclass) 标号
      create_time timestamp without time zone default now() 创建时间
      update_time timestamp without time zone default now() 更新时间
      status integer   状态

      Indexes:
      "uniqid" UNIQUE CONSTRAINT, btree (hashmd5)

查询流程

  1. 在左边页中显示文本:
    • 用户在地址栏输入url链接
    • 可以在链接后面跟上参数id,例如url+“?id=2”
    • 后台用GET方法获取id值并在数据库的表1中查找id对应的文本,并将查找到的文本以参数形式输入到html中,解析html文件,将查找结果显示在网页左栏
    • 如果用户不添加参数,则显示默认文本,即显示出指定id对应的文本
  2. 用户在输入框中输入查找内容,可以是正则表达式,输入内容可以是多段的,段与段之间用若干'#'分开,例如:
  3. 正则匹配:
    • 将用户在url中输入的参数id通过隐藏标签hidden由GET方法传递到POST方法:
      1. html页面的form表单中包含文本框和按钮的标签,匹配提交按钮添加javascript函数,处理单击按钮事件;
      2. 在form中添加hidden标签,在按钮处理函数中GET方法中获得的id通过html参数传递进来并赋给hidden的值字段;
      3. POST方法可以获取form中hidden的值,实现了id的传递;
    • 使用python中psycopg2 的处理数据库功能,查找数据库表1,找出id对应文本内容
    • 将传递到后台的用户输入进行处理:
      1. 使用正则表达式方法去掉文本中的回车符(不是换行)
      2. 使用正则表达式方法将空格换成表示多个空格的正则表达式
      3. 使用正则表达式方法将输入文本中的数字(包括小数点)换成能够表示所有数字的正则表达式
  4. 将文本以若干'#'号分开,对每一段进行处理:
    • 对一段文本进行hash编码(MD5),并使用该字段查找数据库的表2
    • 如果表中不存在本段hash编码则将此段文本、对应正则表达式和编码存到表中
    • 将每段正则表达式替换为html语言的对应文本,并添加颜色信息
  5. 用户点击提交按钮,会在新的页面中显示出已经分段高亮的文本
  6. 对查阅功能按钮的实现:
    • 将用户输入传到后台,同样进行正则转换处理
    • 用代替所有字符正则表达式代替用户输入文本中的若干连续'#'
    • 在数据库的表1中,对文本字段进行正则匹配,获取匹配成功文本对应的id序列
    • 在新的页面中显示匹配成功的id,并将其做成超链接,链接地址是对应id的起始查找url

遇到的问题和解决方法

  1. 学习正则表达时,常常会因为不知道正则表达式中的一些规则盲目的进行表达式组合,在匹配尖括号时要表示除了>外所有的字符,我曾尝试将所有的字符列出来,结果不可能一个一个列出所有类型的字符,而正则表达式只需要使用[^>]即可……详细
  2. 在文本替换时找不到好的方法,正则表达式中的sub方法能够很好的解决这个问题,作用很大
  3. 在实现高亮显示时,出现bug,如果使用连续的字符,成功,带空格和换行,检测不出来。经过晓旭指导,明白先进行文本转换(转变成html格式)后进行匹配时,匹配的文本已经发生变化了,需要先进行正则匹配,再进行文本转换详细
  4. vim使用不熟练,在编写代码时效率不高。晓旭经常手把手的指导,我才慢慢地对vim中一些快捷的操作有些了解详细
  5. 对分段进行处理时,使用.+替换多个#号,替换了#分割符后程序一直匹配不到相应的字符串,这是因为使用.+替换#分割符后不能够查找匹配原文 中的换行符,经过晓旭不断的测试并查找资料,找到了解决换行匹配的方法:在正则匹配时添加参数re.S:使.符号包含所有的字符,包括换行符,还需要将输 入文本中的回车符去掉,它会直接影响匹配结果,这两个问题花了我们一下午时间详细
  6. 需要使用两个按钮实现不同功能时,在html文件的form中添加了按钮标签,但是在功能实现时出现问题,两个按钮都是提交按钮,做相同的事 情。解决方法:将两个按钮类型都改为button,分别为两个按钮添加点击事件,并编写javascript函数处理单击事件,分别处理不同的请求并提 交,实现了对输入文本进行不同的操作详细
  7. 链接数据库后,显示文本根据数据库中的数据显示,但是匹配并高亮处理的文本没有链接的数据库,显示不正确的文本。需要将用户在url中输入的 id字段通过GET方法传递给POST方法,实现匹配数据库。这要用到html中的hidden标签,将hidden(在form中)中的值传递给 POST方法
  8. 使用hidden又遇到问题,GET方法获取的id字段怎么传递给hidden?经过晓旭提示才恍然大悟,使用html参数,在GET函数返回 时,将id字段作为参数引如到html中,以javascript函数方式将该值赋给hidden的value,POST就可以获取该字段详细

我的心得体会

  1. python语言功能强大,有很多强大的模块,支持正则表达式,支持web开发,支持数据库操作,在html中也可以嵌入python的操作。python的功能很强大,但是需要程序员了解怎么使用python中的功能,这个需要长期的学习和实践
  2. web.py功能十分强大,帮助python完成web开发中的很多工作详细
  3. psql在处理数据库操作方面很有用,能够完成对数据库的所有操作,关键还支持正则匹配详细
  4. 在python中使用处理psql的库,能够在python中使用psql语言进行数据操作,并获取库中数据详细
  5. html在网页设计中有重要作用,数据的传递需要深入理解,javascript需要继续学习详细
原文地址:https://www.cnblogs.com/lingear/p/2887470.html