Archive for web-2

今天接触了js的两个工具,一个是nodejs的版本管理工具nvm 一个是nrm,配置npm的镜像源管理工具。

Continue

豆瓣竟然有网友用我的脚本了,还希望我加个次数限制,所以升级了一下,刚看到,复制到博客里了。 // 检查间隔 var interval = 30000; // 是否开启提醒计数,0关闭,>0为几次停止 var open_count = 4; // ==UserScript== // @name 豆瓣豆油提醒脚本 // @namespace http://0x55aa.com/ // @version 0.2 // @description 豆瓣豆油提醒脚本,来豆油后进行弹窗提醒! // @author 0x55aa // @match https://*.douban.com/* // @grant none // ==/UserScript== (function() { 'use strict'; // 检查间隔 var interval = 30000; // 是否开启提醒计数,0关闭,>0为几次停止 var open_count = 4; var count = Number(window.localStorage.getItem("count")) || 0; // 提醒 if (Notification && Notification.permission !== "granted") { Notification.requestPermission(function (status) { if (Notification.permission !== status) { Notification.permission = status; } }); } function notify() { var titleText = "豆油来啦"; var options = { dir: "ltr", lang: "utf-8", icon: "https://img3.doubanio.com/favicon.ico", body: "请赶快处理!!!!!" }; if (Notification && Notification.permission === "granted") { var n = new Notification(titleText, options); } window.localStorage.setItem("count", count+1); window.location.reload(); } function check() { console.log($('#top-nav-doumail-link').children().text()); console.log(count); if ($('#top-nav-doumail-link').children().text()){ if (!open_count){ notify(); }else{ if (count < open_count){ notify(); }else{ window.location.reload(); } } }else{ window.localStorage.setItem("count", 0); count = 0; } } var timer = setInterval(check, interval); })();

Continue

从官网下载了一个mac下的二进制,解压,然后把目录添加到path里边,搞定 node -v查看版本v0.12.7 npm  -v 2.11.3 可以直接输入node进入交互模式,按两次ctrl-c退出   然后复制官方example,保存为main.js。node main.js成功

Continue

declare id_r integer; SELECT currval('haha_id_seq') INTO id_r; 我是写了一个类似mysql 中 ON DUPLICATE KEY UPDATE的功能function,所以选则了这种方法。有重复记录就返回0,没重复记录就返回插入的id。 其实在数据库中执行\d 可以看到有自增id会出来一个表xx_id_seq,表里就一条数据,记录了id的相关数据。

Continue

网站的编辑器从simditor换到了emeditor。原因是嫌simditor的编辑功能太弱。比如样式都在前台定义的,不能控制单个字符的大小,源代码编辑刚加上,效果也不尽人意。 但是换成emeditor,开始挺快,配置也简单,但是上传图片这一关,搞了好长时间,不知道错在哪里。返回的数据按照官网来的,蛋就是提示上传失败。然后没办法Google了一下,发现也有人有这个问题。最后找的了别人的解决方法,貌似是官方的bug,不知道为什么一直不修复。 修改image.js里的186行左右,添加一行

r=r.replace("<pre>", "").replace("</pre>", ""); var json = eval('('+r+')');

Continue

jquery在post一个array的时候,我直接{array:array},提交的字段名字会改称array[]. 解决方法是在发送post之前加上一个jQuery.ajaxSettings.traditional = true; 直接用ajax的话加一个traditional:true 参数。然后就好了,从提交的数据看,array[]=[]直接提交一个list。而array是array=&array=&&&这种形式。

Continue

在选中一个值的时候,设置必须选中其他值。开始使用attr('selected','selected'),发现只有在第一次选中的时候好用。 从网上查找发现要使用prop('selected','selected')来做,问题就解决了。

Continue

github地址 https://github.com/0x55aa/pytoto 写不下去了,又开始写别的了 我去。 总是做着做着发现东西越来越多。

Continue

在settings里加入

if 'test' in sys.argv:
    DATABASES['default'] = {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'test_db'
    }
回加快数据库的生成操作,用time试了一下,效果非常显著。我写了一个测试,从显示看创建数据库用了18秒,占了百分之九十九以上,当然这个比重没啥用。 每次都要在setUp()里边创建数据,然后再测试,不知道有没有好方法,可以在测试开始就创建一个完整数据库,并保证每一个测试类都能保持数据库数据的不变

Continue

tornado里面有关几个cookie的处理,在web.py文件里。 get_cookie,set_cookie普通的设置cookie,clear_cookie,clear_all_cookies是删除cookie。 还有两个是get_secure_cookie,set_secure_cookie,这两个的功能是能够防止用户的cookie被伪造。 先看看函数处理方法。set_secure_cookie,里边与set_cookie的区别就是value经过create_signed_value的处理。 create_signed_value,得到当前时间,将要存的value base64编码,通过_cookie_signature将 加上name,这三个值加密生成签名。然后将签名,value的base64编码,时间戳用|连接,作为cookie的值。 _cookie_signature,就是根据settings里边的 保密的密钥生成签名返回。 get_secure_cookie,用|分割cookie的value,通过name,原value的base64的编码,时间戳得到签名,验证签名是否正确,正确返回,还多了一个过期时间的判断 如果别人想伪造用户的cookie,必须要知道密钥,才能生成正确的签名,不然通过get_secure_cookie获取value的时候,不会通过验证,然后就不会返回伪造的cookie值。

Continue