https://cdn.programmer.work/icon/avatar.jpg

Shawn's blog

分享我的知识、经验、生活与感悟

文章内容可能过时、有瑕疵、有误、甚至和主流价值观相违背

使用 Django 中的 Q 对象查询

0X00 普通的查询

    from django.db.models import Q

    queryset.filter(Q(age=233)) # 找到233岁的人
    queryset.filter(Q(name='shawn')) # 找到名为shawn的人

这种查询方式与普通的方式比起来没什么区别。

    queryset.filter(age=233)
    queryset.filter(name='shawn')

0X01 AND

    from django.db.models import Q

    queryset.filter(Q(age__range=(18, 25), Q(gender='F'), Q(beautiful=True)) # 找到18到25岁的漂亮女生

把多个条件用逗号分割开就可以了,或者使用&符分割开。

使用 git stash save 将暂存区命名

git stash save/apply/pop

在用git的时候经常会有需要临时切分支等操作,但是如果当前工作区进行了修改就不能直接切分支。这时候呢就得把当前的代码暂存起来,可以这么操作:

Docker 中备份与恢复镜像

0X00 遇到了一个问题

前段时间自己的电脑重装了系统,然后公司内网的Docker hub出了点问题,没办法继续开发。后来经过一波Google找到了一个可以备份与恢复Image的方法,使用docker save / docker load命令。

Python 中的 enumerate() 方法

0X00 enumerate是什么

enumerate()是一个Python自带的函数,用来同时遍历刻碟带对象和索引值.

0X01 enumerate怎么用

如果不在不使用enumerate()的情况下去除一个字符串列表中的字符串中的空格,那么通常会写出下面这种程序.

Python 中的 pyc 文件

我们在编写Python程序的时候会发现在我们的目录中可能会出现与源代码同名的pyc文件生成,比如有一个源码文件是hello.py那么可能会生成一个hello.pyc文件出来.这个pyc文件是Python的字节码文件,就类似于Java中的hello.class一样.

使用 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用于调试还是可以的,不过如果用于生产环境的不论是安全性还是性能都不足以满足生产环境的需要.

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

0X00 安装fabric

使用pip可以轻松地安装fabric

    pip install fabric

0X01 初次调用

在当前目录下创建一个名为fabfile.py的文件,填写文件内容如下:

    # coding=utf-8
    import fabric


    def test():
        print 'hello,world'

然后在当前目录下执行命令fab test就可以看到一条hello,world输出了。

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

0X00 可迭代对象

Python中的列表,元组,字典,文件都是可迭代对。可迭代对象简单地说就是可以用for i in xxx:来遍历的对象。

    my_list = [1, 2, 3, 4, 5, 6, 7]
    for i in my_llist:
        print i

    my_dict = {
        'a': u'苟利国家生死以',
        'b': u'岂因祸福避趋之'
    }
    for i in my_dict:
        print i

不过如果数据量非常非常庞大的时候,会很影响程序的性能。这种时候就可以使用生成器来解决这个问题。

git 初步使用经验

0X00 怎样正确使用分支

通常情况下一个git仓库要保持三个及以上的分支,基本的分支明明如下:

namefunction
master正常运行的稳定版本
develop正常运行的开发版
feature添加新功能的分支
hotfix紧急修复bug的分支

如果你已经fork了一份代码到自己本地,当你想添加一个新功能比如「用户管理」的时候,就应该先换到develop分支,然后由这个分支创建一个新的名为feture_add_usermanager的分支。在新分支里编写代码后将代码提交一个PullRequest到自己的develop分支,合并起来后再提交一个PullRequest到团队的仓库中,等待团队其他成员review后就可以正式将代码合并到团队的develop中了。等下一次发布新版本的时候就可以将团队的develop分支合并到团队的master分支中了了。

用好 Linux 之:软件推荐

0X00 推荐一波Linux下的软件

Linux对于普通用户可能确实没有那么友好,但是对于计算机“专业”人士来说就好多了。我从接触Linux到现在也有个三两年了,而且用Linux桌面也有一段时间了。这段时间里也发现了不少好用的软件和工具,在这里整理一下也向大家推荐一波。这些工具有些是用来提升工作效率的,有些是用来娱乐的等等。。不过每一个都是我离不开的好工具。 非常重要的一点是,我推荐的这些软件除了为知笔记以外都是 免费的 ,而且还有一大半是 开源的

Python 使用 virtualenvwapper 管理虚拟环境

0X00 virtualenv好用但有瓶颈

virtualenv固然好用,可以给你每一个Python项目创建一个独立的Python环境互不干扰。有三五个Python项目的时候用的很开心,有十几个项目的时候还凑合,如果有更多的项目virtualenv就会出现瓶颈。因为virtualenv会给每一个Python虚拟环境创建一个目录来保存相关文件,项目一多这个虚拟环境的目录也就多了起来,每次在多个环境之间source ../../../xxx/bin/activedeactive 也挺烦的,并且很容易把某些环境搞丢。不过开源世界最不缺的就是解决问题的方法了,既然有人遇到了这个问题,那么八成就已经有了解决这个问题的好办法。

Python 中 Virtualenv 和 pip 的简单用法

0X00 安装环境

我们在Python开发和学习过程中需要用到各种库,然后在各个不同的项目和作品里可能用的版本还不一样,正因为有这种问题的存在才催生了virtualenv的诞生。virtualenv可以在电脑上创建一个虚拟环境,可以针对每一个项目创建一个虚拟环境,这样就不用担心各个不同的项目用不同版本的库的时候出现的冲突了。 ** 下面的内容只适用于Linux/OSX,未经Windows环境测试 **

Python 中 OS 库的常用方法

在写一些系统脚本或者自动化运维脚本的时候经常会用到os库,这里做个整理,方便查找

os.sep

获得当前操作系统使用的目录分隔符,比如Windows就会得到\而Linux/Unix就会得到/

浅析 HDFS

0X00 HDFS的设计

HDFS作为GFS的开源实现,和GFS是高度一致的。在HDFS中有着下面的优点

  1. 对超大文件支持良好,由于其分布式实现,可以存储超大文件,甚至单个文件大小可以超过集群中任意一台机器的磁盘大小
  2. 采用流式数据访问,一次写入、多次读取是最高效的访问模式。因为Hadoop作为一个大数据处理平台,并没有频繁的写入操作,只是在需要的时候一次将大量的数据写入然后在对这些数据进行读操作
  3. Hadoop并不需要运行在昂贵且高可靠的硬件之上,单个节点可能性能可靠性都参差不齐,但是由于其高可靠性的设计,使之能在遇到节点故障时继续运行且不让用户察觉到明显的终端

但是HDFS也不是适用于各种场景,一下的几种场景就不适

Java 中的字符串

String类中每一个看起来会修改String值得方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。 —《Java编程思想》第13章

Python 奇技淫巧 (五) 系统脚本

文章中的代码仅在Python3中测试成功,没有在Python2中测试。

0X00 退出程序,显示错误信息

写脚本的时候经常会有执行出错,出错的时候可以用一句话把程序退出并且打印错误信息 raise SystemExit('error message')