tornado——python网页框架

今天对tornado有了初步了解,早知道有这样的东西就不用一直用VC++开发界面了。

tornado用来开发网页,我将用它作为毕业设计的前台开发工具。

安装

通过以下几步就可以轻松完成。或者自己下载一个,像下面一样解压安装就好啦。

wget http://github.com/downloads/facebook/tornado/tornado-2.1.1.tar.gz

tar xvzf tornado-2.1.1.tar.gz

cd tornado-2.1.1

python setup.py build

sudo python setup.py install

其实可以自动安装的(推荐):

sudo apt-get install python-tornado

什么都不会呀,看这个网址确实适用于零基础学python表单和模板:

http://segmentfault.net/blog/qiwsir/1190000000733803

这个里面有教数据库操作,以后会用到:

http://demo.pythoner.com/itt2zh/ch1.html

一、按钮的使用

今天下午探索了一点按钮的用法,原来有提交按钮,普通按钮,重置按钮三种。

普通按钮:

<input type="button" value="ICMP DDOS" onclick="window.location='/ICMP_index';">

onclick用来响应action。/ICMP_index是和.py文件里的句柄相对应的。(不知道这样说对不对,其实我还不太懂运行原理)

明天继续补充……

二、上传文件

upload.py

import tornado.ioloop  
import tornado.web  
  
class MainHandler(tornado.web.RequestHandler):  
    def get(self):  
        self.render('index.html')  
  
class UploadHandler(tornado.web.RequestHandler):      
    def post(self):  
        if self.request.files:  
            myfile = self.request.files['myfile'][0] 
            print self.request.files
            filename = myfile["filename"]
            fin = open("/home/lyc/download/%s"%filename,"w")   #将上传的文件保存到这个路径 
            print "success to open file"  
            fin.write(myfile["body"])  
            fin.close() 
            self.render('show.html')

  
application=tornado.web.Application([(r'/',MainHandler),(r'/upload', UploadHandler) ]  
        )  
  
if __name__=='__main__':  
    application.listen(2033)  
    tornado.ioloop.IOLoop.instance().start()
index.html
<html>
  <body>
    <form action="/upload" enctype="multipart/form-data" method="post">
    <input name="myfile" type="file">
    <input type="submit" value="Submit">
    </form>
</body></html>
show.html
<!DOCTYPE html>
<html>
    <head>
        <title>success</title>
    </head>
    <body>
        <h2>Your file have been uploaded successfully</h2>
    </body>
</html>
以上是最基本的本机——本机的文件传输,但我想实现的是上传到FTP服务器上。
打算直接在服务器(此服务器非ftp)上运行,可是发现在本机输入网址后,上传文件对话框里只有本机的文件。服务器是识别不了文件名的。
同时发现只能网页get到文件名和文件内容,但是路径无法获取,这样将文件先上传到服务器,再传到FTP的想法就失败了……额,我想静静
这个问题有待解决。
昨晚上睡不着的时候想到,传文件本来就是对文件的复制,只要知道文件名和内容,再创建一个就可以。今天发现,问题不在于读不到文件名,而是文件名的格式问题。
在web页面中获取的文件名是unicode格式。
<type 'unicode'>   2.txt
所以在open("filename","w")时识别不了filename。需要
filename.encode("utf-8")

将unicode编码为字节流,就可以创建文件了!

三、遇到的问题

1、怎么通过单击按钮,进入另一个响应函数?

[W 150407 15:48:33 web:989] 400 GET /administrator (127.0.0.1): Missing argument password

想在注册完成后,回到登录页面,刚开始直接在注册的函数里self.render("download.html"),这样可以进入登录页面,但是一登录就出现上面这个错误.经过观察发现了端倪:在登录页面时,地址竟然是http://localhost:8000/register(本来应该是http://localhost:8000),仔细一想,它可能还停留在注册函数中。

暂时没直接解决这个问题,就用了另一种方式实现。

单击按钮后,响应post方法,进行数据处理后,进入另一个页面(提示),将要进入的响应函数作为参数传入,点击按钮进入那个响应函数。

 2、怎么将数据库中的内容显示到页面上。

刚开始想的是将数据以表格形式显示在页面上(最后应该还是免不了用这种方式),不过先循序渐进,用列表打印出来。

将下面这段代码放入html文件的<body>中:

<ul>
{% for item in items %}
<li>{{ escape(item) }}</li>
{% end %}
</ul>

在.py中,只需在render时传入参数items就可以调用了:

items = ["1","2"]
self.render("list.html",items=items)

经过尝试,可以将字典中的内容显示到表格中:

在.html文件的<body>中设计表格(复制一下把原来的排版都弄乱了):

<ul>
<table border="1" cellpadding="10">
<caption><h2>用户列表</h2></caption>
<tr>
<th align="left">用户名</th>
<th align="right">&nbsp;&nbsp;&nbsp;密码</th>
</tr>
{% for key in items.keys() %}
  <tr>
  <td align="left"> {{key}}</td>
  <td align="right"> {{items[key]}}</td>
  </tr>
{% end %}
</ul>

其中<ul>表示无序列表(<ol>为有序列表) border="1"表示表格的边框 cellpadding="10"表示表格大小,“&nbsp;”表示空格,<td align="left">表示内容靠左(right则为靠右)。

在.py文件中传入字典即可(其中的dic是自己定义的字典):

self.render("administrator.html",items=dic)

3、

 

posted @ 2015-03-11 20:19  云裳诉  阅读(826)  评论(0编辑  收藏  举报