tornado常见问题一
1 怎么获取从页面中的传值
使用 self.get_body_argument
tornado的参数存储在self.request.body内,通过json以后就可以直接取值,当初我在前端使用angular时tornado就不能通过self.get_argument()获取到只能用这种办法获得angular post过来的数据。
2 怎么获取从url传过来的值
使用self.get_argument
参考 :https://www.cnblogs.com/x54256/p/8195576.html
tornado的get和post提交的参数都可以通过self.get_argument()获得。只需要在第一个参数中填写key值就可以获取,第二个参数为默认值
3 设置安全cookie过期时间
self.set_secure_cookie('user_id', '1', expires_days=None, expires=time.time()+900)
4 write()
write 可以在同一个处理方法中多次使用write方法
write方法是写到缓冲区的,我们可以像写文件一样多次使用write方法不断追加响应内容,
最终所有写到缓冲区的内容一起作为本次请求的响应输出。
在write函数内部有一句
if isinstance(chunk, dict):
chunk = escape.json_encode(chunk)
如果存在,将会以json的格式去改变协议头,然后json数据
实际上,我们可以不用自己手动去做json序列化,当write方法检测到我们传入的chunk参数是字典类型后,会自动帮我们转换为json字符串。
5 如何重写tornado.web.RequestHandler方法
此方法下有一函数,initialize()
使用initialize()进行重写
6 传值html标签转义
tornado会自动的转义,把所有的输出都作为字符串,这样做的就能防止一些恶意代码在输出到前端时被执行,从而造成数据泄露。
在django下进行转义 示例 {{ a_tag|safe }}
1 全局转义,在application中添加配置项
autoescape= None
2 在html文档开始添加 {% autoescape None %} #实现整个文档转义
#在开启全局和文档不转义的情况下,可以使用 escape() 来开启变量的转义
{{ a_tag }}
{{ escape(a_tag) }}
3 也可以使用{% raw a_tag%}来输出不转义内容
tornado是默认自动开启转义的,大家可以根据需求来选是否转义,但是要知道转义的本意是来防止浏览器意外执行恶意代码的,所以去掉转义的时候需要谨慎选择。
7.使用了代理后发现获取到的IP是127.0.0.1或是服务器端IP
解决方案:
Tornado支持通过x-real-ip或x-forwarded-for来获取IP,
但前提是需要在你的HTTPServer实例中增加xheaders=True参数
http_server = HTTPServer(Application(), xheaders=True)
或 application.listen(8080, xheaders=True)
nginx配置x-forwarded-for时只需在反向代理规则中增加一行:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
8.在settings里面配置好static_path后,编写代码这样是没有问题的,图片可以正常显示。但是如果图片属性是在单独的css文件中定义了,background: url(‘{{static_url(“img/button_go.gif”)}}’) repeat-x left top; 就不行.
解决方案:CSS只是被HTML文件引用,是在用户的浏览器上被载入,
没有经过tornado模板引擎的处理,{{static_url(“img/button_go.gif”)}}是不会被转换成文件的实际地址的。
直接设置 相对路径 ,或避免css文件中出现image属性
posted on 2019-01-23 15:29 myworldworld 阅读(284) 评论(0) 收藏 举报
浙公网安备 33010602011771号