django开发中的一些实用技巧

下面分享一些django中的开发技巧。会持续更新…

1.保存用户名,昵称等信息时,如果含有特殊字符,可以先通过base64编码,再保存到数据库中


# model中的字段定义
nickname = models.BinaryField(max_length=512, help_text="用户昵称")

base64编码如下:


# base64编码,结果是bytes类型
nickname_b64 = base64.b64encode("nickname".encode(encoding="utf-8"))

# 将bytes类型转换为str类型
nickname_str = nickname_b64.decode("utf-8")

base64解码如下:


# 解码
nickname_bytes = base64.b64decode(nickname_str)

# 将解码后的bytes类型转换为str类型
nickname_str = nuckname_bytes.decode("utf-8")

2.使用字典代替if条件
下面举一个简单的例子:


# coding=utf-8


def test01(flag):
    if flag == 0:
        test("小明")
    elif flag == 1:
        test("小张")
    elif flag == 2:
        test("小刘")

def test02(flag):
    flag_dict = {0: "小明", 1: "小张", 2: "小刘"}
    test(flag_dict.get(flag))

def test(name):
    print("name:", name)

if __name__ == '__main__':
    test02(0)
    test02(1)
    test02(2)
    # test01(0)
    # test01(1)
    # test01(2)

可以看到,test01与test02实现的功能相同,但是test02中使用字典,比test01中使用if代码简洁很多。

3.同时迭代多个(2个或以上)列表:


# coding=utf-8


def test01(l1, l2, l3):
    for tmp1, tmp2, tmp3 in zip(l1, l2, l3):
        print("l1, l2:", (tmp1, tmp2, tmp3))


if __name__ == '__main__':
    l1 = [1, 2, 3, 4]
    l2 = ["zhangsan", "lisi", "wangwu", "xiaoming"]
    l3 = ["math", "chinese", "english", "python"]
    test01(l1, l2, l3)

结果如下:


l1, l2, l3: (1, 'zhangsan', 'math')
l1, l2, l3: (2, 'lisi', 'chinese')
l1, l2, l3: (3, 'wangwu', 'english')
l1, l2, l3: (4, 'xiaoming', 'python')

zip函数还有如下功能:将列表中对应的元素合并成元祖


In [1]: l1 = [1, 2, 3]

In [2]: l2 = ["猪妹", "狗头", "牛头"]

In [3]: zip(l1, l2)
Out[3]: <zip at 0x2146fa920c8>

In [4]: ret = zip(l1, l2)

In [5]: list(ret)
Out[5]: [(1, '猪妹'), (2, '狗头'), (3, '牛头')]

In [7]: l3 = ["女警", "女枪", "女坦"]

In [8]: ret = zip(l1, l2, l3)

In [9]: list(ret)
Out[9]: [(1, '猪妹', '女警'), (2, '狗头', '女枪'), (3, '牛头', '女坦')]