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

Shawn's blog

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

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

Linux 下日常使用软件推荐

本来准备总结一下Linux桌面系统使用一年以来的一些感受,以及为什么选择Linux作为桌面系统工作学习的,但是构思了半个小时也没能想到要写些什么。所以还是来推荐一下一年以来在Linux桌面平台下的软件体验和推荐吧。由于我这一年多以来一直使用的是Fedora Workstadion,所以并不能保证这些软件能在其他平台下的体验与我一致,不过一般来说都是没有问题的呢。

使用 Docker 部署 Sentry 服务

0X00 Sentry是什么

Sentry是一个统一收集整理程序异常错误的服务。如果你有一个程序在跑,并且配置了日志,那么可以轻松的找到程序出错的地方;甚至可以在报错后发邮件通知自己以便抓紧处理。但是如果你的团队有10个项目和50个人,并且这50个人并不是每人只负责一个项目,此时此刻该怎么办呢?难道为每个项目都配置很多人,并且在人员变动和项目变动的时候都去再修改吗?这样就未免有点傻了,Sentry就是用来做这个的。

Django 中事务的三种简单用法

0X00 什么是“事务”

“事务”简单的说就是把一些数据库操作打包起来,要么就全部执行要么就全部不执行。

假设有一个操作是新建一个学生信息,有多张表分别记录了“基本信息、家庭信息、学校信息等“,那么就需要分成多步来新增这个学生的信息。但是如果在添加了”基本信息和家庭信息“两张表的内容后在添加”学校信息“时出现了错误那么数据库中就会存在该学生部分信息,从而使得数据库中的数据出现错误。

Django 与 Django REST framework 中的这些 "空"

0X00 Django Model中的空

Django的Model常见两个与空有关的参数:nullblank。其中null是数据库层面的是否允许为Null,而blank则将空处理为空值。比如一个CharFieldblank=True,那么这个字段在没有赋值的情况下入库,这个字段就会是空字符串而不是Null。

Django REST framework 中要注意的几个点

0X00 Model中要注意的几点

verbose_name 和 help_text 属性

Model中通常第一个参数指定的是verbose_name,还要手动指定一个help_text属性。其中verbose_name属性是用来我们自己读的,而help_text是用于提供字段描述类的功能,比如在DJango Admin中verbose_name会变成字段的中文名,而help_text则会变成改字段的描述。

使用 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环境测试 **