Shawn's Blog

Django REST framework 中要注意的几个点

0X00 Model中要注意的几点 verbose_name 和 help_text 属性 Model中通常第一个参数指定的是verbose_name,还要手动指定一个help_text属性。其中verbose_name属性是用来我们自己读的,而help_text是用于提供字段描述类的功能,比如在DJango Admin中verbose_name会变成字段的中文名,而help_text则会变成改字段的描述。 unicode 方法 每一个Model类我们最好都要重写一下这个__unicode__方法,使之返回一个有意义的数据。比如一个学生信息的Model,我们不去重写这个方法,最后在ipython中或是项目中直接调的话就是这个样子的<QuerySet <Student: 1>, <Student: 2>, <Student: 3>]>。如果我们重写了这个方法 那么返回值就是`<QuerySet <Student: (男)小明>, <Student: (女)小红>, <Student: (女)小兰d>]>。不仅是在调试过程中还是程序里都会有不错的效果。 关于choices…

使用 Django 中的 Q 对象查询

0X00 普通的查询 这种查询方式与普通的方式比起来没什么区别。 0X01 AND 把多个条件用逗号分割开就可以了,或者使用&符分割开。 0X02 OR 这里用|符号分割开筛选条件,最终筛选得到的是"所有女生、四川人和叫王铁蛋的人",也就是说相当于分别筛选了这三个条件,最终取了并集。这种查询如果用普通方法进行查询就会很麻烦,可能要写成下面这样: 0X03 NOT 使用Not查询的方式就比较诡异了 0X04 组合技 有的时候经常需要查询同样的条件多次,这种方法就可以一次编写查询条件多次执行

Fedora 中 dnf 命令使用 Socks5 代理

在Linux下安装软件通常会使用包管理工具自动处理依赖问题,在Fedora下一般使用dnf包管理工具。一般我们会给自己的源设置为国内的镜像源,比如 但是有的时候还是避免不了从国外源下载数据,这种情况下经常出现速度巨慢无比甚至会断开的情况。这种时候我们可以给dnf设置通过代理连接网络,这样一来下载速度就会快得多了。 sudo vim /etc/dnf/dnf.conf编辑dnf的配置文件,添加如下配置,保存后再执行dnf命令就可以使用代理的方式连接了。 需要注意的几点: 1. 本示例只是针对我自己的电脑,如果你自己的Shadowsocks配置跟我的不同,请根据自己的配置自行修改(没有密码的可以不写后两项) 2. 示例中使用了socks4://的协议,如果自己有其他方式的代理也可以使用,比如http://等 3. 当不再使用的时候记得将配置注释掉,以防连接国内源也使用代理

使用 git stash save 将暂存区命名

git stash save/apply/pop 在用git的时候经常会有需要临时切分支等操作,但是如果当前工作区进行了修改就不能直接切分支。这时候呢就得把当前的代码暂存起来,可以这么操作: 这样就吧上次commit到现在的修改都暂存起来了,可以使用git stash show来查看暂存区。我以前就是这样的,每次由两个或是两个以上的stash之后就蒙圈了,不知道那个stash做了哪些改变。虽然git stash show可以看到每个stash修改了哪些文件,但是还是不能准确的定位到自己需要的stash。 后来发现git stash后面还能继续接参数,这里得感谢git plugin for oh-my-zsh。当临时保存一些修改的时候可以这样:git stash save "fix:xxxxx",有多个stash的时候也可以用git stash show来看到每个stash的备注,就方便多了。 其中git stash pop是应用一个stash,并删除这个stash。git stash apply是只应用不删除。 善用git可以大幅提升效率哦

Docker 中备份与恢复镜像

0X00 遇到了一个问题 前段时间自己的电脑重装了系统,然后公司内网的Docker hub出了点问题,没办法继续开发。后来经过一波Google找到了一个可以备份与恢复Image的方法,使用docker save / docker load命令。 0X01 备份与导入镜像 首先查看自己的镜像,然后找一个准备备份的镜像,找到他的IMAGE ID,假设选中的是ubuntu的镜像,那就使用dokcer save 0458a4468cbc --output ubuntu.tar就可以把ubuntu.tar文件拷贝到其他电脑上。 到另外一台电脑上执行docker load --input ubuntu.tar就可以把这个镜像导入进去。

Python 中的 enumerate() 方法

0X00 enumerate是什么 enumerate()是一个Python自带的函数,用来同时遍历刻碟带对象和索引值. 0X01 enumerate怎么用 如果不在不使用enumerate()的情况下去除一个字符串列表中的字符串中的空格,那么通常会写出下面这种程序. 可以看到光是处理空格都用了四行,而且还并不怎么优雅.那么可以使用enumerate()来修改一下这个程序. 语法大概就是这for 索引, 对象 in enumerate(可迭代对象).用起来不仅干净优雅而且可读性也更强了.

Python 中的 pyc 文件

我们在编写Python程序的时候会发现在我们的目录中可能会出现与源代码同名的pyc文件生成,比如有一个源码文件是hello.py那么可能会生成一个hello.pyc文件出来.这个pyc文件是Python的字节码文件,就类似于Java中的hello.class一样. Python虽然是解释性语言,但还是可以有一个编译的过程,只不过是编译成字节码文件罢了.如果我们的源码带有包含关系,比如源码a.py里面import了源码文件b.py,那么在执行python a.py的时候就会将b.py编译成b.pyc. 下次再运行python a.py的时候解释器会检查b.py与b.pyc的修改时间,如果一致就代表源码没有修改过,那么就可以直接调用b.pyc来更快的执行程序,如果时间不同那就证明b.py被修改过,则会重新编译b.py.…

使用 uwsgi 和 supervisor 部署 Django 程序

0X00 使用uwsgi启动Django 首先安装uwsgi,pip install uwsgi就可以装好.然后找到Django生成的wsgi.py文件,这文件通常实在与项目名同名的app目录下的,比如我的项目名为django_test那么这个文件应该就在django_test/wsgi.py.然后执行uwsgi --http 0.0.0.0:8080 --wsgi-file django_test/wssgi.py就可以用uwsgi启动你的Django项目了. Django自带的python manage.py runserver用于调试还是可以的,不过如果用于生产环境的不论是安全性还是性能都不足以满足生产环境的需要. 0X01 使用supervisor维持服务在线…

Python 自动化运维与远程部署:fabric

0X00 安装fabric 使用pip可以轻松地安装fabric 0X01 初次调用 在当前目录下创建一个名为fabfile.py的文件,填写文件内容如下: 然后在当前目录下执行命令fab test就可以看到一条hello,world输出了。 0X02 浅显的道理 根据上面简单的例子可以看出来fab命令执行的时候会默认找到当前目录下的fabfile.py文件,找到后会用fab命令的参数去匹配fabfile.py中的函数名,执行相应的功能。 实际上当前目录可以没有fabfile.py,如果当前目录的上级目录中有fabfile.py是会采用上级目录中的fabfile.py的。而且文件名也不一定用fabfile.py,假设取了一个名为asdf.py的文件,那么只需要执行fab -f asdf.py就可以采用这个fabfile了。 0X03 执行本地命令 作为一个可以用来自动化运维和远程部署的库,运行本地命令是一个必不可少的功能。 这里的local方法就是执行本地命令,并将输出打印出来。然后运行fab list_home_dir就可以看到自己~目录下的文件们了。当然,也可以带参数的。…

Python 中的迭代、生成和 yield 关键字

0X00 可迭代对象 Python中的列表,元组,字典,文件都是可迭代对。可迭代对象简单地说就是可以用for i in xxx:来遍历的对象。 不过如果数据量非常非常庞大的时候,会很影响程序的性能。这种时候就可以使用生成器来解决这个问题。 0X01 生成器 生成器的用法和普通的可迭代对象差不多,最大的特点就是:“用的时候才去计算”。这里写一个简单的例子,演示一下情况。第一种生成超大列表的方式要逐项计算完才算弄出来了这个10000长的列表,而后者是生成器,只是声明了怎么算,并没有真的去算,所以在速度上才是完全不能比的。 运行结果如下: 0X02 yield关键字 那是时候自己生成弄一个生成器出来了,Python中提供的yield关键字就是用来干这个的,通过这个关键字可以创造自己的生成器。 还是上面同样的例子,稍加改动 运行起来看到的时间差距和刚刚演示的也差不多