简单的网页制作过程

博客介绍了在Ubuntu上搭建Apache2的参考链接,还讲述了简单网页制作过程,包括编写HTML文件用于与用户交互,给出关键代码位置;编写含cgi的主程序代码等。此外,还附加了固定长度表格的html代码和非阻塞运行的快速页面跳转方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Ubuntu搭建Apache2, 详情可以参考https://www.cnblogs.com/lovemo1314/p/5623762.html
  2. 编写HTML文件,用于与用户的交互信息。在该处的关键代码有两处:
    1)在<script type="text/javascript"> </script>代码区内定义function checkform()函数,一般放在<head> </head>代码区
    2)在<body> </body>代码区块加上<form role="form" name="myform" action="/cgi-bin/INSP/INSP.py" method="post" onsubmit="javascript:return checkform();" enctype="multipart/form-data"> </form>代码。在该代码区内放入网页与用户的交互信息设置。
    所有的HTML代码及图片,提供用户下载的文件都放在/var/www/html/文件夹下。
  3. 编写含有cgi的主程序代码以及其他程序代码,全部放在/var/www/cgi-bin/及其子文件夹中。在该处主程序代码的cgi接口代码如下:
import cgi
import cgitb; cgitb.enable()

form = cgi.FieldStorage()
seq_paste = form.getvalue('get1')   #文本类的网页信息获取
fileitem = form['get2']  #文件类的网页信息获取
email_goal = form.getvalue('get5')

 if fileitem.filename:    #文件类的网页信息的名字及内容提取
     with open(Folder +'seq.fasta', 'wb') as fw:
         fw.write(fileitem.file.read())

#非阻塞运行方式的创建, 该种方式可能会使跳转页面不能快速出现
import subprocess
import threading
class my_thread(threading.Thread):
    def __init__(self,job_id,email_goal):
        super(my_thread, self).__init__()
        self.job_id=job_id
        self.email_goal=email_goal
    def run(self):
        p = subprocess.Popen(['python','/var/www/cgi-bin/INSP/server.py',str(self.job_id),self.email_goal], stderr=subprocess.STDOUT) #若是子进程中申明了运行环境,可将‘python’ 去除。该处是未申明环境且含有参数输入到子进程的情况。参数传递时,子进程只需加入import sys即可通过sys.argv[1]获取第一个参数,以此类推。
pid=os.fork()
if pid==0:
    t=my_thread(job_id,email_goal)
    t.start()
else:
    #此处可添加提示页面等。

#python打印html页面
print("Content-type:text/html")
print("")
print('<html>')
print('<head>')
print('<meta charset="utf-8">')
print('<title>INSP</title>')
print('</head>')
print('<body>')
#添加打印内容。注意若是涉及到链接自己生成的页面不成功的时候,在网址前面将http://信息加入
print('</body>')
print('</html>')

至此,简单的网页制作基本完成。

附加:固定长度的表格的html的一些代码:

    with open(filename, "w") as fr:
        fr.write("<!DOCTYPE html>\n")
        fr.write("\n")
        fr.write('<html>\n')
        fr.write('<head>\n')
        fr.write('<meta charset="utf-8">\n')
        fr.write('<title>INSP</title>\n')
        fr.write('</head>\n')
        fr.write('<body>\n')
        fr.write('<table border="2" cellpadding="10" cellspacing="0" width=1830>\n')
        for index, item in enumerate(result_merge):
            fr.write('<tr><td colspan="3" style="word-wrap:break-word;word-break:break-all;" width=1830 >' + seq_names[
                item[0]] + ':&nbsp&nbsp' + item[4] + '</td></tr>\n')
            # consensus result
            fr.write('<tr>\n')
            fr.write('<td width=33%>\n')
            fr.write('<table border="1" cellpadding="10" cellspacing="0" width=100%>\n')
            fr.write('<caption><em><span style="color: #000; font-weight: bold;">Consensus</span></em></caption>\n')
            fr.write(
                '<tr><th width="40%">NLS</th><th width="20%">START</th><th width="20%">END</th><th width="20%">SCORE</th></tr>\n')
            for i in range(len(item[1])):
                fr.write('<tr><td style="word-wrap:break-word;word-break:break-all;">' + item[1][i][0] + '</td><td>' +
                         item[1][i][1] + '</td><td>' + item[1][i][2] + '</td><td>' + item[1][i][3] + '</td></tr>\n')
            fr.write('</table>\n')
            fr.write('</td>\n')
            # machine without splicing result
            fr.write('<td width=33%>\n')
            fr.write('<table border="1" cellpadding="10" cellspacing="0" width=100%>\n')
            fr.write(
                '<caption><em><span style="color: #000; font-weight: bold;">Machine without splicing</span></em></caption>\n')
            fr.write(
                '<tr><th width="40%">NLS</th><th width="20%">START</th><th width="20%">END</th><th width="20%">SCORE</th></tr>\n')
            for i in range(len(item[2])):
                fr.write('<tr><td style="word-wrap:break-word;word-break:break-all;">' + item[2][i][0] + '</td><td>' +
                         item[2][i][1] + '</td><td>' + item[2][i][2] + '</td><td>' + item[2][i][3] + '</td></tr>\n')
            fr.write('</table>\n')
            fr.write('</td>\n')
            # frequent result
            fr.write('<td width=34%>\n')
            fr.write('<table border="1" cellpadding="10" cellspacing="0" width=100%>\n')
            fr.write('<caption><em><span style="color: #000; font-weight: bold;">Frequent</span></em></caption>\n')
            fr.write(
                '<tr><th width="40%">NLS</th><th width="15%">START</th><th width="15%">END</th><th width="15%">ENRICH</th><th width="15%">SCORE</th></tr>\n')
            for i in range(len(item[3])):
                fr.write('<tr><td style="word-wrap:break-word;word-break:break-all;">' + item[3][i][0] + '</td><td>' +
                         item[3][i][1] + '</td><td>' + item[3][i][2] + '</td><td>' + item[3][i][3] + '</td><td>' +
                         item[3][i][4] + '</td></tr>\n')
            fr.write('</table>\n')
            fr.write('</td>\n')
            fr.write('</tr>\n')
        fr.write('</table>\n')
        fr.write('</body>\n')
        fr.write('</html>\n')

在这里插入图片描述
附加:非阻塞运行方式的快速页面跳转方式
1)不同于上述的pid方式,该方法将上述跳转提示页面直接写在含有cgi的主程序中,一般放在获取网页信息后的代码之后,然后通过下面的代码来连接计算程序部分:

    camdline='bash /home/server/INSP/INSP.sh '+str(job_id)+' '+email_goal
    stdin, stdout, stderr = ssh.exec_command(camdline)  #该处若是本地运行INSP.sh,可换成os.system(camdline)

INSP.sh内容如下:
$1 $2分别为第一个、第二个参数

#!/bin/bash
sh /home/server/INSP/tmpINSP.sh $1 $2 >/dev/null 2>&1 &   

tmpINSP.sh内容如下:

#!/bin/bash
/home/server/INSP/main.py $1 $2

main.py即为计算程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值