BLOG
Enjoy when you can, and endure when you must.
MAR 19, 2014/Django
Django多数据库的简单应用
在使用Django时,我们很多时候都是与一个数据库打交道,特别是对于小工程来说。不过如果要在同一工程里同时使用多个数据库呢?那也挺简单的,只需几步即可达到该目标。首先,我们肯定需要在工程配置文件(默认为settings.py)中的DATABASES配置项定义我们要使用的所有数据库。DATABASES = {     'default': {         'NAME': 'app_da...
nginx平滑升级
最近nginx的更新还是挺频繁的,那升级啥的就在所难免了。好在nginx本身支持平滑升级,能在不影响服务运行的情况下完成升级。让我们来看看如何操作。首先当然是告知当前运行的nginx要升级了。这需要向master进程发送USR2信号,如下所示:$ ps aux | grep nginx root     11966  0.0  0.0  47628   980 ?  &...
SSH问答集锦
SSH,即Secure Shell,是一种网络协议,用于在远程计算机上执行基于命令行的网络服务和一些其他命令。SSH以其较高的安全性和加密性而闻名,目前主要被网络管理员用在管理远程Web服务器上。 本文展示了10个SSH相关的面试问答。 1. 在默认配置下,SSH使用哪个端口?如何修改该端口? 答:SSH默认使用22端口。可以通过修改其配置文件来改变默认端口号。 我们可以通过在终端中执行下面的一行命令来查看SSH的端口号。 # grep Port /etc/ssh/sshd_config  [On...
MAR 15, 2014/Python
从Python看排序:插入排序
在学习排序算法时,我们可以经常看到插入排序的身影。我们继续用扑克牌来描述该算法的实现方式。假设有5张牌以如下方式堆放在桌面上: 将面上的一张牌拿起并放在手上: 因为这是第一张牌,所以我们无需考虑其位置。接着再从桌面上拿起面上的一张牌并与手上的牌进行比较,然后插入到正确的位置上: 接下来的操作与此相同。将梅花5取出然后放在梅花3和梅花8之间: 重复该过程直到所有的牌都从桌上拿起并插入到手中几张牌中的正确位置。 整个过程中,插入排序同时维护两组元素,一组排序后的元素和一组待排序的元素。在上面的扑克牌例子中,桌上的一叠扑克就是待排序...
在RHEL/CentOS 4-6中安装并启用RPMForge仓库
本文转载并翻译自《Install and Enable RPMForge Repository in RHEL/CentOS 6, 5, 4》RPMForge仓库是一个用于在Red Hat Enterprise Linux (RHEL) 和Community ENTerprise Operating System (CentOS)中安装第三方软件包的工具。它提供了超过5000个rpm格式的软件包。RPMForge本身并不属于RHEL或CentOS系统的一部分,不过其设计意图即是为这些系统服务。可以在http://packages.sw.be/浏览所有的RPMForge包列表。让我们来看看...
MAR 12, 2014/Python
从Python看排序:选择排序
选择排序采用了我们在生活中常用的一种方式,同样以扑克牌为例对桌上的5张扑克牌进行升序排序。 这一次,我们纵观全局并选出最小的一张。在刚才那组扑克中可以发现梅花3是最小的: 我们将其取出拿到手上,其余牌则继续放在桌上: 然后重复之前的操作,可以得到第二大的牌“梅花5”: 将其拿起并放在“梅花3”的右边。 当桌面上所有的牌都拿起后,我们手上的牌将会以从小到大的顺序放置。 选择排序就与此过程类似。只是说在代码实现中,我们实际只在一个列表中完成整个操作。选择排序同样...
MAR 11, 2014/Python
从Python看排序:冒泡排序
冒泡排序在排序算法中是最简单的一种,它通过多次遍历列表,将最大的元素冒泡到列表的头部或尾部。我们通过对四张扑克牌(花色相同)以从小到大的方式进行排序来演示该算法的工作原理。首先将扑克牌面朝上放在桌上,如下图所示: 该算法要求多次遍历扑克,每次都从头开始,并在上一次遍历的前一张结束。在每一次遍历中,总是从前两张牌开始。如果前者比后者大,则交换位置。 然后比较第二张和第三张,同样如果前者更大则互换,否则保持原样。 这样依次类推,直到将最大的那一张牌移动到最后。 下图演示了接下来的两次遍历。第二次遍历将会使第二大的牌交换至倒数第二的位置上,第三次...
MAR 04, 2014/Django
为Django模型增加自定义的view权限
本文转载并翻译自《Adding a view permission to Django models》在Django中对于每一个请求都会利用Django权限模型来控制对指定对象类型的访问。这在Django看来已经再平常不过了,特别它已经在所有模型上提供了“增加”、“修改”和“删除”等默认权限。那如何添加我们的“view”权限呢?关于这个问题网上有不少答案,不过还是感觉没什么点睛之笔。经过一番摸索,我发现post_syncdb钩子最适合来完成这项任务。当使用syncdb命令时,所有的内容类型都会检测是否具有“view”权限并在没有的情况下创建。现在只要抓住这一要点并将相应的代码放在一个应用...
MAR 01, 2014/Python
用Python搞定基本认证
本文翻译自《Basic Authentication》,翻译得不好还请见凉。引言这篇教程意在阐明什么是基本认证(base authentication)以及如何用python对其进行处理。你可以从Voidspace Python Recipebook下载本文中的示例代码。第一个示例,So Let's Do It,展示了如何手动处理基本认证,以此解释其工作原理。第二个示例,Doing it Properly,则采用一种更合适更自动化的方法来处理。示例中利用了Python标准库中的urllib2模块,它提供了一个简单的接口用于从互联网请求页面。其中的urlopen方法以openers...
FEB 27, 2014/Python
两步验证的使用和TOTP在Python中的基本实现
两步验证是一些云服务或者游戏中使用得比较广泛的认证方式,用户在登录过程中,除了输入设置的固定密码之外,还需要输入由验证器生成的一次性密码。这种验证很多是基于TOTP(Time-Based One-Time Password,基于时间的一次性口令),它是对OTP(One-Time Password,一次性密码)的拓展,叫作HTOP(HMAC-based One-Time Password,基于HMAC的一次性口令)算法。其基本原理是: 客户端和服务器事先协商好一个密钥K,用于一次性密码的生成过程。此外,客户端和服务器各有一个计数器C,并且事先将计数值同步。 进行验证时,客户端对...
<< < 7 8 9 10 11 > >>