今天接触了js的两个工具,一个是nodejs的版本管理工具nvm
一个是nrm,配置npm的镜像源管理工具。
Read more...
Archive for web-2
TAMPERMONKEY 豆瓣豆油提醒脚本升级版
豆瓣竟然有网友用我的脚本了,还希望我加个次数限制,所以升级了一下,刚看到,复制到博客里了。
// 检查间隔
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);
})();
Read more...
mac安装node js
从官网下载了一个mac下的二进制,解压,然后把目录添加到path里边,搞定
node -v查看版本v0.12.7
npm -v
2.11.3
可以直接输入node进入交互模式,按两次ctrl-c退出
然后复制官方example,保存为main.js。node main.js成功
Read more...
Postgresql获取插入的自增id
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的相关数据。
Read more...
使用umeditor上传图片一直提示上传失败
网站的编辑器从simditor换到了emeditor。原因是嫌simditor的编辑功能太弱。比如样式都在前台定义的,不能控制单个字符的大小,源代码编辑刚加上,效果也不尽人意。
但是换成emeditor,开始挺快,配置也简单,但是上传图片这一关,搞了好长时间,不知道错在哪里。返回的数据按照官网来的,蛋就是提示上传失败。然后没办法Google了一下,发现也有人有这个问题。最后找的了别人的解决方法,貌似是官方的bug,不知道为什么一直不修复。
修改image.js里的186行左右,添加一行
Read more...
r=r.replace("<pre>", "").replace("</pre>", ""); var json = eval('('+r+')');
jquery post一个array
jquery在post一个array的时候,我直接{array:array},提交的字段名字会改称array[].
解决方法是在发送post之前加上一个jQuery.ajaxSettings.traditional = true;
直接用ajax的话加一个traditional:true 参数。然后就好了,从提交的数据看,array[]=[]直接提交一个list。而array是array=&array=&&&这种形式。
Read more...
option selected属性设置问题attr,prop
在选中一个值的时候,设置必须选中其他值。开始使用attr('selected','selected'),发现只有在第一次选中的时候好用。
从网上查找发现要使用prop('selected','selected')来做,问题就解决了。
Read more...
pytoto django论坛放到github上了
github地址
https://github.com/0x55aa/pytoto
写不下去了,又开始写别的了 我去。
总是做着做着发现东西越来越多。
Read more...
django单元测试数据库设置
在settings里加入
Read more...
if 'test' in sys.argv:
DATABASES['default'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'test_db'
}
回加快数据库的生成操作,用time试了一下,效果非常显著。我写了一个测试,从显示看创建数据库用了18秒,占了百分之九十九以上,当然这个比重没啥用。
每次都要在setUp()里边创建数据,然后再测试,不知道有没有好方法,可以在测试开始就创建一个完整数据库,并保证每一个测试类都能保持数据库数据的不变
tornado的cookie和secure cookie
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值。
Read more...