DRF类视图让你的代码DRY起来

刚开始写views.py模块的代码,一般都是用def定义的函数视图,不过DRF更推荐使用class定义的类视图,这能让我们的代码更符合DRY(Don’t Repeat Yourself)设计原则:

Python骚操作从列表推导和生成器表达式开始

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列。 容器序列与扁平序列 容器序列存放的是对象的引用,包括list、tuple、collections.deque。 扁平序列存放的是对象的值,包括str、bytes、bytearray、memoryview和array.array。 扁平序列的值是字符、字节和数值这种基础类型。 不可变序列与可变序列 不可变序列,包括tuple、str、bytes。 可变序列,包括list、bytearray、array.array、collection.deque、memoryview。 下图左边是父类,右边是子类,可以看出可变序列是从不可变序列继承来的,扩展了可变方法: 列表推导 Python语言魅力在于简洁,这能从最常见的创建列表体现出来,比如我们想把字符串"abc"转换成新列表["a", "b", "c"],常规写法: symbols = "abc" codes = [] for symbol in symbols: codes.append(symbol) print(codes) # ["a", "b", "c"] 用到了for循环和列表append方法。实际上可以不用append方法,直接: symbols = "abc" codes = [symbol for symbol in symbols] 这叫做列表推导,是更加Pythonic的写法。 无论是编写效率还是可阅读性,列表推导都更胜一筹,可以说是构建列表的快捷方式。但是不能滥用,通用原则是,如果列表推导的代码超过了两行,就要考虑用append了。这不是规定,完全可以凭借自我喜好来选择。 笛卡尔积是指多个序列中元素所有组合,我们用列表推导来实现笛卡尔积: colors = ["black", "white"] sizes = ["S", "M", "L"] tshirts = [(color, size) for color in colors for size in sizes] 一行代码搞定!Life is short,use Python,list comprehension is wonderful,amazing。 ...

DRF对Django请求响应做了技术升级

Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优化改造,本文就来介绍DRF在这一部分的技术升级。

魔法方法推开Python进阶学习大门

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 热爱Python Python是Guido van Rossum设计出来的让使用者觉得如沐春风的一门编程语言。2020年11月12日,64岁的Python之父宣布由于退休生活太无聊,自己决定加入Microsoft的DevDiv Team,致力于“确保更好地使用Python”。尽管在国内有些声音在Diss着Python,认为它太简单,只是个脚本语言,但是它的发明者对Python的热情,仍然激励着我们坚持对Python的热爱。 龟叔是所有编程语言发明者当中头发最多的这位。 奇迹时刻 collection.len()是面向对象语言的写法,len(collection)是Python语言的写法,这种风格叫做Pythonic。从前者到后者,就像变魔术一样,一瞬间让人眼前一亮。这个魔术就是Python魔法方法,或者叫双下方法,它是用双下划线开头和双下划线结尾的特殊方法,比如obj[key],Python解释器实际上会转换成obj.__getitem__(key)来运行,但是使用者并无感知。 __getitem__和__len__ __getitem__用来获取数据,__len__用来返回长度,这2个魔法方法是Python基础,我们通过一副扑克牌来了解: import collections # 定义一副牌 Card = collections.namedtuple('Card', ['rank', 'suit']) class FrenchDeck: # 大小 ranks = [str(n) for n in range(2, 11)] + list('JQKA') # 花色 suits = 'spades diamonds clubs hearts'.split() def __init__(self): # 生成一副牌 self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks] def __len__(self): return len(self._cards) def __getitem__(self, position): return self._cards[position] 本来我们对这副牌什么都不能做,但是由于实现了__len__,可以使用len()函数查看有多少张牌: >>> len(deck) 52 由于实现了__getitem__,可以使用中括号索引取值: >>> deck[0] Card(rank='2', suit='spades') 能进行切片: >>> deck[:3] [Card(rank='2', suit='spades'), Card(rank='3', suit='spades'), Card(rank='4', suit='spades')] >>> deck[12::13] [Card(rank='A', suit='spades'), Card(rank='A', suit='diamonds'), Card(rank='A', suit='clubs'), Card(rank='A', suit='hearts')] 能迭代: ...

Flask项目发布流程

本文继续对Flask官方教程进行学习,我就直接跳过Templates、Static Files、Blog Blueprint三小节了,因为基本不会在实际项目中用到这些技术,有时间多学习下前端才是。这篇文章把Make the Project Installable、Test Coverage、Deploy to Production这三小节汇总来学习。我觉得这是官方给出的一个Flask项目发布流程,

2026-01-07 · 4 分钟 · 649 字 · 测试开发刚哥 · Python生态 · #Flask

pytest用例查找原理

当执行pytest命令时,pytest会从project中查找test来执行。本文先从几个路径相关的概念讲起,这样便于理解pytest在遍历路径时的走向。

从函数到包的Python代码层次

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 代码层次 Python是一门脚本语言,新建一个.py文件,写点代码,就可以跑起来了,无论放哪都可以。比如where.py文件: print("Where am I?") 那么问题来了,这是写在哪里的呢?为了一目了然,我们用“导游图”的视角来看看代码层次: 红色箭头指出了,是写在模块中的,原来一个.py文件就是一个模块。模块中可以写函数和类,模块可以放在包中。 函数 Python中最出名的函数一定是print()了,毕竟全世界都在用它say Hello World。Python函数其实和数学中的函数很像,比如y = f(x)。有函数名字、输入和输出。Python的函数结构如下: 函数通过def关键字来定义: def 函数名(参数列表): 函数体 参数列表有就有,无则无,多个参数用逗号分隔。例如: def hello() : print("Hello World!") hello() # 调用函数 def max(a, b): if a > b: return a else: return b a = 4 b = 5 print(max(a, b)) 调用函数,不需要再加def,直接函数名(参数列表)即可。参数既可以是变量,也可以是其他函数,只要能一一对应。return关键字用来返回值。return不是必需的,如果没有,那么函数会把内部代码全部都执行完再退出,如果有,函数会在return语句立刻退出,同时返回return语句的值,例如: # 可写函数说明 def sum( arg1, arg2 ): # 返回2个参数的和." total = arg1 + arg2 print ("函数内 : ", total) return total print("这里不会执行!") # 调用sum函数 total = sum( 10, 20 ) print ("函数外 : ", total) 类 为什么还要写类,函数它不香么?这个问题有点大,我只能简单解释一下,那就是因为,类是包括了函数的,如果有一天你发现函数不够用了,那么可以用类试试,哈哈哈。 ...

揭开DRF序列化技术的神秘面纱

在RESTful API中,接口返回的是JSON,JSON的内容对应的是数据库中的数据,DRF是通过序列化(Serialization)的技术,把数据模型转换为JSON的,反之,叫做反序列化(deserialization)。本文就来揭开2揭开DRF序列化技术的神秘面纱技术的神秘面纱。

Flask的Blueprints和Views

Flask的view函数是用来对请求作出响应的。单个URL能匹配到单个View,那么多个类似的URL,比如:

2026-01-06 · 2 分钟 · 258 字 · 测试开发刚哥 · Python生态 · #Flask

pytest断言技巧

pytest的断言把Python语言简洁的优点发挥的淋漓尽致,因为它用的就是Python的标准断言assert。

2026-01-06 · 13 分钟 · 2583 字 · 测试开发刚哥 · Python生态 · #Pytest