原文地址,原文中Hierarchical Data直译为 分层结构,这里我翻译成 树状结构

补充资源:

  1. https://django-mptt.github.io/django-mptt/ ,如果你也使用python和django,这个是现成的APP。

另外,个人觉得这种方法对于搜索的效率提升最大,而相应的新增、删除等操作则会变慢,个人猜测未经测试。

个人总结的核心:如果一个节点A是节点B的子节点,那么A的左值一定大于B的左值,A的右值一定小于B的右值。或者说,A的左值一定在B的左值和右值之间。
阅读全文

服务器推送事件(server-sent events,SSE)是一种除websocket、ajax简单轮寻外另一种实现服务器数据主动推送数据到浏览器的方式。

这里,举一个的例子来说明如何使用基于pyhon的服务端来实现,为了简单我使用flask框架来实现。关键点有2个:

  1. HTTP响应头中包含content-type:text/event-stream
  2. 流响应
阅读全文

CentOS7安装systemtap

发布在 centos

这两天突然对火焰图起了兴趣,至于什么是systemtap、什么是火焰图这里我不多说了,网上有很多介绍,这里说记录一下我的安装过程以及
碰到的坑。

阅读全文

博客迁移记录

经过3天的不懈努力,终于完成了博客的迁移工作,同时删除了一些无病呻吟的、没干货的文章。

现在本博客基于 hexo 以及使用主题 tranquilpeak 构建,这个主题原生支持百度统计以及多说评论,而且不使用google相关资源,对于我这种前端盲很是友好。

唯一不足就是这个主题使用cloudflare的CDN,速度相对于国内的CDN还是慢一些,可以修改成国内自己喜欢的,代码位于themes/tranquilpeak/layout/_partial/script.ejs第50行。

同时部署在github以及coding上,并使用dnspod进行域名解析,dnspod最大的好处就是支持国内外不同的来源解析到不同的地址,对于国外的IP解析到github,对于国内的IP则解析到coding。

阅读全文

MySQL数据库修复

发布在 数据库

把博客服务器搬到香港之后,发现这个供应商的服务器经常自动重启,不过mysql、nginx都设定了开机自启动,所以也就没当事。结果今天出了大问题:服务器ip可以ping的通,但博客就是无法访问,登录到服务器一看,我擦——整个数据盘不见了!由于把网站放在了/home目录下,而现在home目录空荡荡的啥也没有。

阅读全文

自定义Django用户模型

发布在 Django

Django最方便的一点可以说就是自带的用户系统了,不过某些情况下自带的用户系统不太符合项目需求,比如你想添加几个字段怎么办?当然可以使用自定Model然后外键关联User类来实现,不过一方面关联查询的效率比直接查询效率要低,另一方面想删除系统自带用户系统的某些字段怎么办呢?

所以,自定义用户模型可以说是一种很常见的需求。这里以Django1.9为例,记录一下自定义用户模型的方法。

阅读全文

目前网上的关于Django-REST-framework中文文档教程大多数都是你抄我我抄你,也找不出到底是出自谁手以及哪个版本的文档翻译了。于是我决定将自己阅读文档的翻译记录下来,供有需要的人阅读。

但经过排版,发现这种由多章组成的系列教程,在博客上怎么弄都不方便看,所以教程直接放到gitbook上,请移步至:

https://darkcooking.gitbooks.io/django-rest-framework-cn/content/

评论和分享

细心的老读者可能发现,本站现在全面启用了https,为啥捏?因为好看!哇哈哈哈……

这里记录一下Centos6系统上的nginx配置方法。这里我使用 letsencrypt 提供的免费证书,首先访问https://certbot.eff.org/,然后根据你的实际情况选择webserver和操作系统,这里为了通用性,我选择“Unspecified Webserver on Other UNIX”。

阅读全文

今天调试Django项目时候,使用Logging记录异常并发送邮件给网站管理人员,测试时候始终报错:

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
Traceback (most recent call last):
File "/usr/lib64/python2.7/wsgiref/handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 177, in __call__
response = self.get_response(request)
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/core/handlers/base.py", line 230, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/core/handlers/base.py", line 284, in handle_uncaught_exception
'request': request
File "/usr/lib64/python2.7/logging/__init__.py", line 1185, in error
self._log(ERROR, msg, args, **kwargs)
File "/usr/lib64/python2.7/logging/__init__.py", line 1278, in _log
self.handle(record)
File "/usr/lib64/python2.7/logging/__init__.py", line 1288, in handle
self.callHandlers(record)
File "/usr/lib64/python2.7/logging/__init__.py", line 1328, in callHandlers
hdlr.handle(record)
File "/usr/lib64/python2.7/logging/__init__.py", line 751, in handle
self.emit(record)
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/utils/log.py", line 117, in emit
self.send_mail(subject, message, fail_silently=True, html_message=html_message)
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/utils/log.py", line 120, in send_mail
mail.mail_admins(subject, message, *args, connection=self.connection(), **kwargs)
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/core/mail/__init__.py", line 97, in mail_admins
mail.send(fail_silently=fail_silently)
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/core/mail/message.py", line 292, in send
return self.get_connection(fail_silently).send_messages([self])
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 100, in send_messages
new_conn_created = self.open()
File "/home/xsy/.virtualenvs/dz_pro/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 67, in open
self.connection.login(self.username, self.password)
File "/usr/lib64/python2.7/smtplib.py", line 607, in login
(code, resp) = self.docmd(encode_cram_md5(resp, user, password))
File "/usr/lib64/python2.7/smtplib.py", line 571, in encode_cram_md5
response = user + " " + hmac.HMAC(password, challenge).hexdigest()
File "/usr/lib64/python2.7/hmac.py", line 78, in __init__
self.outer.update(key.translate(trans_5C))
TypeError: character mapping must return integer, None or unicode

根据错误提示,追进了hmac.py中看了源码,发现key其实就是一个字符串,是配置在settings中的EMAIL_HOST_USER以及EMAIL_HOST_PASSWORD,而translate函数则是根据给出的参数表将字符串进行映射加密的,而且是最简单的凯撒加密法。

阅读全文

Django常用三方库

发布在 Django

更新于2016.06.28

首先安利本书《two scoops of django1.8》目前还没有中文版,不过是我看过关于django的书中收获最大的一本。本来有机会和作者面基,可惜我大天朝的签证太难办了,只得作罢。

这里推荐三方库的大部分出自这本书,移除了部分失效或者不维护的库,添加了一些其他库,强烈建议大家阅读原书。

下面的模块有些是django模块,有些则是python模块,可以脱离django直接使用。

话说那些复制到别地方然后标注“原创”的,敢加个本文链接不?手工整理很累的好不?

阅读全文

Roy.S

90后程序员


自由职业者


China