Django相关用法
request.GET.get()用法
request.GET
获取的是包含所有通过GET
请求传递给服务器的参数的字典对象(也就是?
后面的参数列表)。注意这里是字典对象,那么相应的,便可以使用get()
方法根据键值获取相应的属性值,即request.GET.get('key')
。
列表生成式
列表生成式可以用来便捷创建list
数组。如生成`[1×1, 2×2,
..., 9×9]的列表时,可以仅使用一行代码完成:
1 |
|
此外for循环后面还可以加上if进行判断,以完成更高阶的操作,比如只需要计算偶数的平方时:
1 |
|
需要注意for
后面的if语句不能带else
,因为for
后面的if
是个筛选条件,不然就无法进行筛选了(带了else
不就是全条件了?)
1 |
|
如果把if
写在for
前面需要加else
,否则也会报错。
1 |
|
因为for前面的部分是一个表达式,必须要计算出一个结果。如果只是x if x % 2 == 0
是无法根据x
计算出结果的,因为缺少了else
。
1 |
|
因此,在一个列表生成式中,for
前面的if...else
是表达式,而for
后面的if
是过滤条件,不能带else
。
Django的Cast()函数
声明
1 |
|
强制将expression
的结果类型转换为来自output_field
的结果类型。即类型转换。
示例:
1 |
|
这里把原来为非float
类型的age
强制转换为float
类型。
:=
运算符
:=
其实就是赋值运算符。
Django
序列化组件Django REST Framework
Django 序列化组件 Serializers 详解 - 种树飞 - 博客园 (cnblogs.com)
序列化组件可以把复杂的数据类型(查询集或模型实例)转换为 Python 数据类型,同时该组件还提供反序列化功能。最主要的用途是把实例对象序列化为 Json 格式的数据或者把 Json 格式的数据反序列化为实例对象。
声明序列化程序
在使用序列化之前需要声明序列化器,该序列化器可以序列化或反序列化与对象相应的数据,声明序列化器和声明类是很相似的:
1 |
|
序列化对象
相当于使用对象实例的内容新建一个与之对应的序列化器实例
1 |
|
这时已经转换为 Python 原生的数据类型了。接下来就是常用的把数据渲染为 .json 格式:
1 |
|
反序列化对象
反序列化分为两步:
- 数据校验
- 数据保存
需要先把 Python
原生数据类型流解析,这里使用的是io.BytesIO()
,解析完之后再使用JSONParser().parse()
将其转化为
JSON 格式的数据:
1 |
|
然后通过is_valid()
进行数据校验,返回True
之后便可通过validated_data
获取数据了。
1 |
|
保存数据
在调用序列化器的save()
方法时,需要手动创建create()
和update()
方法。
1 |
|
当有了create()
方法,在创建序列化对象时便可以通过partial=True
来允许部分字段更新。
创建新数据
当创建序列化对象时只传入 data
数据即创建新数据,自动调用create()
方法。
1 |
|
更新数据
当创建序列化对象时传入实例 instance 对象和 data
数据时即更新数据,传入两个数据系统会自动调用update()
方法。instance
为要更新的对象实例,validated_data 为更新数据。
1 |
|
Class Meta的功能
简单来讲,class Meta 作为嵌套类给上级类添加一些功能或者指定一些标准。
1 |
|
比如上面的这个,把 Main 类定义为抽象类,方便其他类进行继承,这个类也不必生产数据库表单。
1 |
|
上面的 db_table 指定了 MainWheel 对应的数据库表。
1 |
|
上面的 ordering 表示按照指定的字段进行数据库的排序,目的是让结果便于查找并且美观一些。
os.path 模块
os.path 模块主要用于获取文件的属性。
方法 | 说明 |
---|---|
os.path.abspath(path) | 返回绝对路径 |
os.path.basename(path) | 返回文件名 |
os.path.commonprefix(list) | 返回 list (多个路径) 中,所有 path 共有的最长的路径 |
os.path.dirname(path) | 返回文件路径 |
os.path.exists(path) | 如果路径 path 存在,返回 True;如果路径 path 不存在或损坏,返回 False。 |
os.path.lexists(path) | 路径存在则返回 True,路径损坏也返回 True |
os.path.expanduser(path) | 把 path 中包含的 ~ 和 ~user 转换成用户目录 |
os.path.expandvars(path) | 根据环境变量的值替换 path 中包含的 \(name** 和 **\){name} |
os.path.getatime(path) | 返回最近访问时间(浮点型秒数) |
os.path.getmtime(path) | 返回最近文件修改时间 |
os.path.getctime(path) | 返回文件 path 创建时间 |
os.path.getsize(path) | 返回文件大小,如果文件不存在就返回错误 |
os.path.isabs(path) | 判断是否为绝对路径 |
os.path.isfile(path) | 判断路径是否为文件 |
os.path.isdir(path) | 判断路径是否为目录 |
os.path.islink(path) | 判断路径是否为链接 |
os.path.ismount(path) | 判断路径是否为挂载点 |
os.path.join(path1[, path2[, ...]]) | 把目录和文件名合成一个路径 |
os.path.normcase(path) | 转换 path 的大小写和斜杠 |
os.path.normpath(path) | 规范 path 字符串形式 |
os.path.realpath(path) | 返回 path 的真实路径 |
os.path.relpath(path[, start]) | 从 start 开始计算相对路径 |
os.path.samefile(path1, path2) | 判断目录或文件是否相同 |
os.path.sameopenfile(fp1, fp2) | 判断 fp1 和 fp2 是否指向同一文件 |
os.path.samestat(stat1, stat2) | 判断 stat tuple stat1 和 stat2 是否指向同一个文件 |
os.path.split(path) | 把路径分割成 dirname 和 basename,返回一个元组 |
os.path.splitdrive(path) | 一般用在 windows 下,返回驱动器名和路径组成的元组 |
os.path.splitext(path) | 分割路径,返回路径名和文件扩展名的元组 |
os.path.splitunc(path) | 把路径分割为加载点与文件 |
os.path.walk(path, visit, arg) | 遍历 path,进入每个目录都调用 visit 函数,visit 函数必须有 3 个参数 (arg, dirname, names),dirname 表示当前目录的目录名,names 代表当前目录下的所有文件名,args 则为 walk 的第三个参数 |
os.path.supports_unicode_filenames | 设置是否支持 unicode 路径名 |
json.load() 函数
json.load() 函数读取文件,可以直接读取这个文件的所有内容,并且读取的结果返回为 python 的字典对象。
request.body
返回请求的主体(Json对象)