设为首页 收藏本站
查看: 1123|回复: 0

[经验分享] tornado——python网页框架

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-1 11:43:08 | 显示全部楼层 |阅读模式
  今天对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、
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145826-1-1.html 上篇帖子: Python五子棋的小程序 下篇帖子: Python学习 Day 12 调试 断言 logging pdb pdb.set_trace
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表