美文网首页
django 源码分析 - base36编码函数

django 源码分析 - base36编码函数

作者: 0xjeff | 来源:发表于2016-03-21 16:04 被阅读0次

    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 中。

    相关文章

      网友评论

          本文标题:django 源码分析 - base36编码函数

          本文链接:https://www.haomeiwen.com/subject/psmklttx.html