- 博客(135)
- 收藏
- 关注

原创 Paw —— 比Postman更舒服的API利器
特点:颜值高本地应用,流畅有收藏夹,管理请求可使用环境变量。比如用来一键切换开发环境请求和线上环境请求。即不同环境的同个接口只有host不一样,其它都是一样的,所以就把host抽离出来弄成一个环境变量。丰富的Auth. 支持Basic Auth/ OAuth1/ OAuth2/ S3 signature/ 自定义等。支持dynamic value。 比如当前时间戳、随机数、UUID
2017-12-31 20:11:01
52219
5

原创 社区帖子anti-spam综述
搞了anti-spam之后,发现原来杀毒软件的原理也是类似的,浏览器的AdBlock插件原理也是类似的.目的垃圾是不可能根绝的,就跟犯罪不可能根绝一样.所以anti-spam的目的,就是提高攻击成本,降低防御成本.攻击者的目的无非就是牟利,当他们成本太高的时候,就会降低攻击力度.攻击者的智慧人肉打码:绕过验证码淘宝"注册账号交易"代收短信业务/代收邮件业务:
2014-11-27 00:07:29
3732
1
原创 怎样写一个任务队列
之前在用celery的时候,遇到了worker卡住的bug,于是认真的看了相关文档和代码,了解celery实现的原理。其实核心原理非常简单:1. 发送任务到队列2. 守护程序worker死循环不断从队列取任务并执行至于怎么包装传递这个任务,实现思路类似函数传参,有传值、传引用。
2018-01-01 12:58:09
5003
原创 记一次Django代码性能优化及Pycharm Profile使用
是一段导出数据月报的脚本,原先需要十几秒,优化后只需要1秒多。优化第一步就是Profile,先看看慢在哪里。Pycharm自带Profile工具,很方便。 拿一张官方图说明一下。 图表说明:给出了函数调用关系。红色->黄绿色->绿色,颜色越深说明耗时越多。右上角的“x数字”代表函数调用次数。Own代表该函数本身的耗时,不包括调用子函数;而Total包括调用子函数;
2018-01-01 10:18:35
5650
1
原创 计算2个时间段的重叠天数
最近做一个需求,是计算查询日期范围内产生的费用,需要将查询日期范围跟实际产生费用日期范围计算重叠天数,然后重叠天数*每天费用=查询日期范围内的费用。一个时间段跟另一个时间段,有如下三种情况: 1. 没有重叠 2. 部分重叠 3. 包含式重叠。即一个时间段被另一个时间段包含。
2017-12-30 14:19:39
10059
原创 利用Redis实现分布式锁
最简单的思路,就是利用到redis的key,这个key的名字可以叫xx_lock。key已存在 -> 锁被占用创建key -> 获取锁删除key -> 释放锁在需要同步的代码里加锁,先去判断有没有这个key,如果有这个key,说明拿不到锁,如果没有,则创建key,表示拿到了锁。在执行完需要同步的代码后,将key删掉释放锁。
2017-12-30 10:32:33
3303
原创 【python爬虫】使用Selenium+PhantomJS抓取动态页面
需求有些网站反爬虫,会在js里面动态操作DOM渲染页面,执行js后的页面才是最终页面。 而我们在python中直接用requests.get()获取到的页面,是没执行js的页面,没有我们想要的信息。 解决方法是Selenium+PhantomJS.
2017-12-30 00:05:23
5236
原创 一种分布式id生成规则
需求有个生成订单号的需求,对于生成订单号有如下要求不能被猜出订单量唯一性趋势递增订单号包含时间信息防止race condition生成重复的id防止时间回拨生成重复的id满足每秒可以生成1w个订单号订单号不能过长
2017-12-27 00:32:42
5247
原创 Django2.0源码剖析——urls
问题:当我们拿到一个路径的时候,是怎么找到对应的view函数的为什么可以include其它的urls为什么urls.py里面需要一个叫urlpatterns的列表,并且里面是一个个的path()或re_path()函数调用路径pattern开头要不要写反斜杠/,结尾要不要写反斜杠/路径pattern里要不要写^和$为什么包含admin.site.urls不需要include
2017-12-16 16:32:17
4882
原创 Django的国际化
如果是浏览器的话,一般浏览器设置什么语言,发请求的时候,Accept-Language会自动设置成什么语言。所以如果看到settings.py设置LANGUAGE_CODE='en-us',而浏览器访问的时候却显示中文,不要惊讶,是因为Accept-Language优先级高。
2017-12-08 22:38:08
4400
原创 python的国际化gettext模块
国际化与本地化国际化(internationalization).简称i18n(18指在”internationalization”这个单词中,i和n之间有18个字母). 本地化(localization).简称L10n(10指在”localization”这个单词中,l和n之间有10个字母).
2017-12-08 00:14:38
13120
2
原创 使用cURL作为HTTP请求媒介
甲: “这个接口有问题” 乙: “你把你请求发我呢, 我试试看” 甲: “这是个POST请求,咋发给你” 乙: “用cURL格式字符串”
2017-12-02 10:45:32
3637
原创 给Django日志加上request_id
用来标识同一个请求的日志,方便检索和分析。request_id用uuid自动生成。如果请求头有X-Request-ID,就用请求头的,这样一个请求涉及多个服务调用的时候可以把request_id带过去,标识为同一个请求的request_id.
2017-11-29 09:07:17
6344
1
原创 记一次请求Django接口时URL结尾少了斜杠的问题
事情是这样的。移动端的同事在调用Django接口时,明明已经有登录态,却返回未登录。于是app以为是token过期,刷新token再请求,再提示未登录,如此反复,造成了死循环。查看日志,发现是URL后面少了斜杠,由于Django中设置了APPEND_SLASH=True, 当URL后面缺少斜杠时,会自动拼上斜杠,并重定向。那为什么重定向之后,登录态就丢失了呢?
2017-11-27 23:25:21
9521
原创 记一次Django级联删除引发的故障
事情是这样的,运营那边有2个员工离职了,让后台这边删除掉他们的账号。 同事很利索的在Django shell中进行了这样的操作:>> users = User.objects.filter(username__in=[xxx, xxx])>> users.delete()一会过后,运营反馈说很多数据没了。
2017-11-26 22:52:43
3717
原创 飘逸的python - Iterable vs Iterator
本文所有代码均用python3。Iterable(可迭代对象)Iterator(迭代器)
2017-11-26 19:05:28
1590
原创 几个Charles姿势
本文使用的Charles版本是4.0.2 如果把通信比喻成传纸条的话,那么抓包就是查看纸条内容。 Charles是一个http抓包工具,看不了更底层的东西如tcp。
2017-01-26 12:46:49
3626
原创 sentry客户端raven黑魔法一例
之前碰到一个很奇怪的问题from raven import Clientclient = Client(xxxdsn)raise为什么这样就会将异常发送sentry了,明明代码没有任何显式捕获异常的行为,它是怎么捕获异常的呢?翻开raven源码,看到下面这样一段。
2017-01-25 21:04:04
4235
原创 python第三方库推荐 - 用furl优雅的操作url
基本操作>>> from furl import furl>>> f = furl('http://www.google.com/?page=1')>>> f.scheme, f.host, f.port, f.path, f.query, f.fragment>>> f.url>>> f.args>>> f.args['page']>>> f.args['page'] = 2
2017-01-25 13:54:05
5863
原创 图解csrf原理
攻击原理:伪造请求链接,骗你来点 防御原理:不让你那么容易伪造请求(cookie中加入随机数,要求请求中带上,而攻击者获取不到cookie中的随机数)
2017-01-25 13:37:16
3938
原创 爬虫——用xslt抽取页面内容
XSL介绍XSL指扩展样式表语言(EXtensible Stylesheet Language), 它是一个XML文档的样式表语言。XSL 可描述如何来显示XML文档。XSLT中的T指Transformations,即XSL转换。用起来其实很像模板语言,有分支、循环,还有很多函数可以调用,比如字符串函数、数值函数、日期时间函数等。
2016-10-23 08:38:24
2543
原创 weatpy: 命令行天气预报, wego的python实现
weatpy 是一个命令行天气预报. 是wego的python实现. 该项目仅用于学习用途.项目地址https://github.com/mattkang0/weatpy
2016-10-16 13:28:50
2251
原创 理解“闭包是穷人的对象”
闭包是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。 —— 维基百科纯函数是没有状态的,自由变量使得它有了状态。举个例子,有这样一道题:实现counter ,使得调用结果如下:c1 = counter(10)c2 = count
2016-10-10 00:31:38
1976
原创 python中all()的“奇怪”现象
先看一下下面几条语句结果,可能会觉得不是那么符合直觉。>> all([])True>> all([[]])False>> all([[[]]])True一开始在项目中发现all([])返回True,感觉很不理解。其实all()的原理差不多是这样的:def all(iterable): for x in iterable: if bool(x) is False:
2016-10-10 00:23:02
2131
5
原创 阿拉伯数字金额转中文大写 (python实现)
分小数和整数部分进行处理末尾的零应舍弃中间有连续多个零,只取一个零整数部分从右往左以4位为步长扫描
2016-09-17 15:52:49
9317
3
原创 飘逸的python - 代码即文档docstring
什么是docstring在软件工程中,其实编码所占的部分是非常小的,大多是其它的事情,比如写文档。文档是沟通的工具。 在python中,比较推崇在代码中写文档,代码即文档,比较方便,容易维护,直观,一致。 代码写完,文档也出来了。其实Markdown也差不多这种思想,文本写完,排版也完成了。 看看PEP 0257中对docstring的定义: A docstring is a string
2015-07-10 14:05:31
28449
原创 使用sphinx生成美观的文档
先上效果图详情首先,需要知道什么是restructuredtext,可以理解为类似于markdown的一个东西。然后安装,pip install sphinx进入存放文档的目录,在命令行,sphinx-quickstart ,根据需要一路回车,会生成一堆东西,包括conf.py和make等根据需要修改conf.py编写rst文件,比如默认的index.r
2015-07-06 21:00:32
10985
1
原创 独立python环境之virtualenv和virtualenvwrapper
介绍假设有一台测试机,多个人使用,有多个项目,不同项目可能python版本不一样,需要的库不一样。我们需要一个独立干净的python环境,互相隔离,互不影响。 virtualenv可以帮我们解决这个问题。 virtualenvwrapper是virtualenv的封装,可以方便的创建/删除/拷贝/切换不同的环境。安装与配置 pip install virtualenv pip ins
2015-07-06 13:46:49
4185
原创 飘逸的python - __new__、__init__、__call__傻傻分不清
__new__: 对象的创建,是一个静态方法,第一个参数是cls。__init__ : 对象的初始化, 是一个实例方法,第一个参数是self。__call__ : 对象可call,注意不是类,是对象。
2015-06-28 17:02:51
7381
原创 飘逸的python - 单例模式乱弹
方法一:装饰器利用“装饰器只会执行一次”这个特点def singleton(cls): instances = []# 为什么这里不直接为None,因为内部函数没法访问外部函数的非容器变量 def getinstance(*args, **kwargs): if not instances: instances.append(cls(*args
2015-06-28 16:00:48
5213
原创 飘逸的python - 使用dis模块进行代码层次的性能剖析
dis — Disassembler for Python bytecode,即把python代码反汇编为字节码指令.使用超级简单:python -m dis xxx.py当我在网上看到while 1比while True快的时候,我感到很困惑,为何会有这种区别呢?于是使用dis来深入.假设est_while.py代码如下.#coding=utf-8while 1
2014-11-25 12:22:41
8564
1
原创 飘逸的python - 实现trie树
trie,又称前缀树或字典树. 它利用字符串的公共前缀来节约存储空间.定义Trie树中每个单词都是通过character by character方法进行存储,相同前缀单词共享前缀节点.可以看到,每条路径组成一个单词.上面这颗树存了to/tea/ted/ten/inn这些词.性质(1)根节点不包含字符,除根节点外的每个节点只包含一个字符。(2)从根节点到
2014-11-24 15:56:21
16298
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人