python的一些常用操作

连接 mongodb 数据库方法:

1
2
3
4
5
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
client.database(用户名对应的数据库名称).authenticate("user","password")
print('连接数据库成功')
users = client.oneDB.users(client.数据库.表名)
阅读全文
Vue 遍历本地图片

需要循环遍历本地图片地址时,打包后会出现图片找不到,解决方法,可以把图片通过 js import 进来,之后使用 import 的变量来循环

阅读全文
闭包

词法作用域

1
2
3
4
5
6
7
8
function init() {
var name = "Mozilla"; // name 是一个被 init 创建的局部变量
function displayName() { // displayName() 是内部函数,一个闭包
alert(name); // 使用了父函数中声明的变量
}
displayName();
}
init();

init() 创建了一个局部变量 name 和一个名为 displayName() 的函数。displayName() 是定义在 init() 里的内部函数,仅在该函数体内可用。displayName() 内没有自己的局部变量,然而它可以访问到外部函数的变量,所以 displayName() 可以使用父函数 init() 中声明的变量 name 。但是,如果有同名变量 name 在 displayName() 中被定义,则会使用 displayName() 中定义的 name 。

阅读全文
Linux 常用命令

Linux入门

编写命令:

1
echo hello world!!!

不知道这个命令什么意思吗?没关系:

1
man echo	manual(手册)
阅读全文
Linux 系统上搭建 shadowsocks 服务

服务端安装

如果没有 root 权限,首先获取 root 权限

1
sudo su

Debian / Ubuntu

1
2
apt-get install python-pip
pip install shadowsocks

CentOS

1
2
yum install python-setuptools && easy_install pip
pip install shadowsocks
阅读全文
Linux 配置 Hexo + Git 环境

linux 源码包安装

  1. wget http://xxxx 获取源码包
  2. 解压,tar zxvf xxx.tar.gz
  3. ./configure –prefix=/usr/local/xxx 指定安装路径
  4. make 编译
  5. make install 安装
  6. 配置环境变量
    1
    vim /etc/profile

然后在文件的最后一行,添加下面的内容,然后保存退出。

1
export PATH=$PATH:/usr/local/git/bin

使用 source 命令生效。

1
source /etc/profile
阅读全文
数据类型

ECMAScript 中有 6 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String、Symbol (new in ES 6,表示独一无二的值)。还有一种复杂数据类型-Object,Object 本质上是由一组无序的名值对组成的。

除 Object 以外的所有类型都是不可变的(值本身无法被改变)。我们称这些类型的值为“原始值”。
如:JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变

阅读全文
正则表达式

什么是正则表达式:

查找符合某些复杂规则的字符串。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

例:查找 hi:

\bhi\b

\b 用于匹配一个位置,指 hi 前面或后面没有字符(匹配单词的开始或结束)

例:查找 hi 后面不远处跟着一个 Lucy:

\bhi\b.*\bLucy\b

. 是一个元字符,用于匹配除换行符外的任意字符
.* 表示任意数量的不包含换行的字符

例:0\d\d-\d\d\d\d\d\d\d\d 以 0 开头,然后两个数字,-,最后 8 个数字

(012-12345678)——> 可以简写成 0\d{2}-\d{8}

例:简单的 IP 地址分配

(\d{1,3}\.){3}\d{1,3}——a.b.c.d

\d{1,3}匹配 1 到 3 位数字,.匹配一个点(.),(\d{1,3}.){3}重复三次
abcd 数值处于 0-255

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}((2[0-4]\d|25[0-5]|[01]?\d\d?))
2[0-4]\d——匹配200-249之间的数值
25[0-5]——匹配250-255之间的数值
[01]?\d\d?——匹配0-199之间的数值

\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。

这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为 1 的分组中,然后是 1 个或几个空白符(\s+),最后是分组 1 中捕获的内容(也就是前面匹配的那个单词)(\1)

阅读全文
获取时间范围内的每一天

代码见详情

阅读全文
遍历菜单数组,获取选中的子节点的所有父节点元素

遍历菜单数组,获取选中的子节点的所有父节点元素

  1. 假设有一个数组如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    let menus = [
    {
    key: "menu1",
    label: "一级菜单1",
    icon: "",
    },
    {
    key: "menu2",
    label: "一级菜单2",
    icon: "",
    },
    {
    key: "menu3",
    label: "一级菜单3",
    icon: "",
    children: [
    {
    key: "menu3_1",
    label: "一级菜单3_1",
    icon: "",
    children: [
    {
    key: "menu3_1_1",
    label: "一级菜单3_1_1",
    icon: "",
    },
    ],
    },
    {
    key: "menu3_2",
    label: "一级菜单3_2",
    icon: "",
    },
    ],
    },
    {
    key: "menu4",
    label: "未开发页面演示",
    icon: "",
    },
    ];
  2. 需要获取到选中菜单 menu3_1_1 的所有父元素,即 menu3,menu3_1 和 menu3_1_1,js 代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /**
    * selectMenus 切换菜单时候触发的事件,参数为更改的菜单 key
    * breadCrumb 选中菜单的所有父元素的数组集
    */
    let breadCrumb = [];
    // 遍历菜单
    function eachMenus(item, name) {
    for (let i = 0, j = item.length; i < j; i++) {
    breadCrumb.push(item[i].label);
    if (item[i].children) {
    eachMenus(item[i].children, name);
    } else {
    if (item[i].key === name) {
    return;
    } else {
    breadCrumb.splice(this.breadCrumb.length - 1, 1);
    }
    }
    }
    breadCrumb.splice(this.breadCrumb.length - 1, 1);
    }

    function selectMenus(name) {
    breadCrumb = [];
    eachMenus(menus, name);
    }
阅读全文
Algolia