django 源码分析 - base36编码函数

0x01

首先介绍一下什么是 base36编码,它的编码中包含0~9的数字,加上所有26个字母,不区分大小写,不包含任何标点,所有的字母要不全大写,要不全小写。所以加起来就是 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
或者 '0123456789abcdefghijklmnopqrstuvwxyz',同样的还有 base62编码,就是26个字母的大小写再加上0-9,一共62个字符。

base62 编码在短地址服务中用的比较多,比如这种: http://dwz.cn/1qPNt, 有关怎么设计一个高性能的短地址服务在这里有个回答的不错(https://www.zhihu.com/question/29270034) ,大家可以参考。今天主要说的是 django 中 base36 和 int 之间的转换。代码如下

def int_to_base36(i):
    """
    Converts an integer to a base36 string
    """
    char_set = '0123456789abcdefghijklmnopqrstuvwxyz'
    if i < 36:
        return char_set[i]
    b36 = ''
    while i != 0:
        i, n = divmod(i, 36)
        b36 = char_set[n] + b36
    return b36

>>> int_to_base36(123456)
'2n9c'
>>> int('2n9c', 32)
89388
>>>
      

这个函数主要用于 django auth 模块自带的密码重置生成 token 模块 default_token_generator 中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容