Python日常积累(一)

1. request.META

返回的是一个字典,包含此次http请求的header信息

2. python super的使用

super() 函数是用于调用父类(超类)的一个方法,super 是用来解决多重继承问题的,一般用法:super(class_A, self) — 首先找到 class_A 的父类,然后把class_A的对象转换为其父类的对象。

class A(object):
    def __init__(self):
        print('welcome class A')

class B(A):
    def __init__(self):
        print('welcome class B')
        super(B, self).__init__()

if __name__ == '__main__':
    class_a = A()
    class_b = B()

#输出: 
#welcome class A
#welocme class B
#welcome class A

3. factory.django.DjangoModelFactory

4. ZMQ(0MQ/ZeroMQ)学习笔记

消息模式

  • REQ/REP 请求-应答模式

  • SUB/PUB 发布-订阅模式
    在使用SUB套接字时,必须使用zmq_setsockopt()方法来设置订阅的内容。
    如果你不设置订阅内容,那将什么消息都收不到,新手很容易犯这个错误。
    订阅信息可以是任何字符串,可以设置多次。只要消息满足其中一条订阅信
    息,SUB套接字就会收到。订阅者可以选择不接收某类消息,也是通过
    zmq_setsockopt()方法实现的。

    PUB-SUB套接字组合是异步的。客户端在个循环体中使用zmq_recv()接收消
    息,如果向SUB套接字发送消息则会报错;类似地,服务端可以不断地使用
    zmq_send()发送消息,但不能在PUB套接字上使用zmq_recv()。

    关于PUB-SUB套接字,还有一点需要注意:你无法得知SUB是何时开始接收
    消息的。就算你先打开了SUB套接字,后打开PUB发送消息,这时SUB还是
    会丢失一些消息的,因为建立连接是需要一些时间的。很少,但并不是零。

  • 管道模式

合法的套接字连接-绑定对

  • PUB-SUB
  • REQ-REP
  • PUSH-PULL
  • REP-ROUTER
  • DEALER-REP
  • DEALER-ROUTER
  • DEALER-DEALER
  • ROUTER-ROUTER
  • PAIR-PAIR

非法的套接字连接对

  • REQ-REQ
  • REQ-DEALER
  • REP-REP
  • ROUTER-REP

5. json.loads()和json.dumps()

前者是把str(json数据)转化成dict数据,后者则是实现相反的操作

6. 数据库表常见的一些操作

get: 得到的是一条记录对象,可以直接获取其属性值;并且只能是一个对象
filter: 得到的是符合过滤条件记录的列表

7. Flask架构下数据的序列化集反序列化

  • 序列化
    序列化使用schema中的dump()或dumps()方法,其中,dump() 方法实现obj -> dict,dumps()方法实现 obj -> string,由于Flask能直接序列化dict,所以通常Flask与Marshmallow配合序列化时,用 dump()方法即可。
  • 反序列化
    反序列化基于schema中的load()或loads()方法,默认情况下,load()方法将一个传入的dict,结合schema的约定,再转换为一个dict,而loads()方法的传入参数是json格式的string,同样将传入数据转换为符合规范的dict。由于调用load()或loads()方法时,会执行下面提到的数据校验,所以在开发RESTful API时,对传入数据执行load()或loads()方法是必要的。

8. Django 数据库 related_name用法

实现反向查询。

9. Python3 逻辑运算符那点事儿

  • 一个运算符
    • or 从左到右,返回第一个为真的值,都为假返回后一个值
    • and 从左到右,若所有值均为真,则返回后一个值,有一个假的值,则返回第一个假的值
  • 多个运算符
    从左至右,一个一个运算符的算

10. Python *和**的用法 — 多参数的传递和变量的拆解

  • 多参数的传值
    *表示多个非关键字参数的传递,可以用一个tuple表示;**表示多个关键字 参数的传递,可以用一个dict表示
  • 变量的拆解
    *或**放在变量前面是对变量的一次拆解

11. for…else…(python)

正常循环完所有次数,然后执行else语句;如果中途遇到break/continue则可以阻止else语句的执行。

12. 常用enumerate

list0 = ['val1', 'val2', 'val3']
for i, value in enumerate(list0):
    print('{}�:{}'.format(i, value))

#输出
#0:val1
#1:val2
#2:val3

13. 在一段代码中间用from...import...,空一行,然后继续剩下的代码

14. Django rest_framework路由的注册

from rest_framework_nested import routers
a_router = routers.SimpleRouter()
a_router.register(*args)
#如若在a_router的基础上扩展路由,可参照如下写法
b_router = routers.NestedSimpleRouter(a_router, *args, **kwargs)
b_router.register(*args)

15. rest_framework serializer扩展功能

如果需要修改序列化或反序列化的类,可以通过重写to_representation或者to_internal_value方法来实现

def to_representation(self, instance):
    data = super(**siri, self).to_representation(instance)
    # 下面你就可以添加你想要的修改或新增的功能了,比如:
    data['username'] = data['username'].upper()
    return data

16. Django 常见的数据库字段类型及参数

参考链接: http://www.mamicode.com/info-detail-1897477.html

16.1 字段类型

  • AutoField: int自增列,必须填入参数 primary_key=True
  • IntegerField: 整数列(有符号的) -2147483648 ~ 2147483647
  • CharField:字符类型,必须提供max_length(最大字符长度)参数
  • UUIDField: 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
  • TextField: 文本类型(是不受长度限制的CharField)
  • BooleanField: 布尔值类型
  • EmailField: 字符串类型,Django Admin以及ModelForm中提供验证机制
  • URLField: 字符串类型,Django Admin以及ModelForm中提供验证 URL
  • DateTimeField: 日期+时间 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
  • DateField: 日期格式 YYYY-MM-DD
  • TimeField: 时间格式 HH:MM[:ss[.uuuuuu]][TZ]
  • DecimalField: 十进制小数

16.2 参数

  • null: 是否可以为空
  • default: 默认值
  • db_index: 索引
  • unique: 唯一索引
  • editable: django admin是否可以被编辑
  • choices: django admin中显示下拉框,避免连表查询
  • primary_key: 主键
  • auto_now: 创建时,自动生成时间
  • auto_now_add: 更新时,自动更新为当前时间
  • blank: Django admin是否可以留空
  • verbose_name: Django admin显示中文名称

17. Python with语句

适用环境

with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

基本语法及原理

上下文管理器

首先说到with语句,而上下文管理器是必须要知道的概念,有了上下文管理器,with语句才能正常工作。并且上下文管理器必须包含两个方法:__enter__()和__exit__(),如果要自定义上下文管理器,就需要重写这两个方法。

语法

常见的语法格式一般如下:

with context_expression [as tragets]:
    <with-body>

with 语句包裹起来的代码块,在执行语句体之前会调用上下文管理器的 __enter__() 方法,执行完语句体之后会执行 __exit__() 方法。

contextlib模块

contextlib 模块提供了3个对象:装饰器 contextmanager、函数 nested 和上下文管理器 closing。使用这些对象,可以对已有的生成器函数或者对象进行包装,加入对上下文管理协议的支持,避免了专门编写上下文管理器来支持 with 语句。

下面以contextmanager举个栗子:

# -*- coding: utf-8 -*-

from context lib import context manager

@contextmanager
def func0():
    print('Allocate resources')
    print('Before yield')
    yield '*** contextmanager demo ***'
    print('After yield')
    print('Free resources')

with func0() as value:
    print('Assigned resources: {}'.format(value))

#输出
#Allocate resources
#Before yield
#Assigned resources: *** contextmanager demo ***
#After yield
#Free resources

18. qrcode模块的使用

qrcode是一个开源生成二维码的工具,一般地有两种方式来实现:

  • qrcode.make() 函数形式生成二维码
  • qrcode.QRCode() 类实例形式生成二维码

而后端在做开发的时候,常常会结合BytesIO模块,直接返回图片流而不用写文件到硬盘,举个栗子:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from io import BytesIO
import qrcode

def generate_qrcode(request, data)
    qr = qrcode.make(data)
    buff = BytesIO()
    qr.save(buff)

    image_stream = buff.getvalue()
    response = HttpResponse(image_stream, content_type='image/png')
    return response

19. zipfile模块的使用

zipfile模块是python中对文件进行zip格式的的压缩及解压缩的,其中它涉及的两个类比较常用:ZipFileZipInfo

  • ZipFile
    这个类是用来实现压缩和解压缩文件的,具体的用法可参考如下:
    class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None)

    • file: 文件的路径,类文件对象或者类路径对象(比如io.BytesIO())
    • mode: 打开文件的模式,有r,w,a等几种模式
    • compression: 压缩或解压缩的方法,常见的方法比如zipfile.ZIP_STORED,zipfile.ZIP_DEFAULT
    • allowZip64: 如果要操作的zip文件大于2G,设置成true

    当然,ZipFile还有很多的参数,属性或者方法,具体的可参考zipfile官方文档
    举个栗子:

# -*- coding: utf-8 -*-

from io import BytesIO
import qrcode, zipfile

zip_file = BytesIO()
buff = BytesIO()
qr = qrcode.make('https://weixin/qrcode/0909090909')
qr.save(buff)

with zipfile.ZipFile(zip_file, 'w', compression=zipfile.ZIP_DEFAULT) as my_zip:
    my_zip.writestr('my.png', buff.getvalue())
  • ZipInfo

    Instances of the ZipInfo class are returned by the getinfo() and infolist() methods of ZipFile objects.Each object stores information about a single member of the ZIP archive

    上面的一段话是摘自zipfile官方文档,很好的向我们解释了ZipInfo,下面仅列出一些常见的属性:
    ZipInfo.filename: 获取文件名称。
    ZipInfo.date_time: 获取文件最后修改时间。返回一个包含6个元素的元组(年, 月, 日, 时, 分, 秒)
    ZipInfo.compress_type: 压缩类型。
    ZipInfo.comment: 文档说明。
    ZipInfo.extr: 扩展项数据。
    ZipInfo.create_system: 获取创建该zip文档的系统。
    ZipInfo.create_version: 获取 创建zip文档的PKZIP版本。
    ZipInfo.extract_version: 获取 解压zip文档所需的PKZIP版本。
    ZipInfo.reserved: 预留字段,当前实现总是返回0。
    ZipInfo.flag_bits: zip标志位。
    ZipInfo.volume: 文件头的卷标。
    ZipInfo.internal_attr: 内部属性。
    ZipInfo.external_attr: 外部属性。
    ZipInfo.header_offset: 文件头偏移位。
    ZipInfo.CRC: 未压缩文件的CRC-32。
    ZipInfo.compress_size: 获取压缩后的大小。
    ZipInfo.file_size: 获取未压缩的文件大小。

20. git一些命令使用

21. 生成patch和打patch(linux命令)

# 生成补丁(多文件模式,如果单文件去电参数rN即可)
diff -uprN origfile newfile > diff.patch
# 打补丁,需要cd到代码的根目录
patch -p1 < diff.patch
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • ZeroMQ API Reference 创建一个ZMQ的上下文环境,是ZMQ一切的开始。 线程安全,不需要自己加...
    分享放大价值阅读 3,084评论 0 3
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,207评论 4 16
  • 一、 消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能...
    步积阅读 56,841评论 10 138
  • 昨天做了一个梦。 我遇到了一个男孩子,觉得相貌还可以,是个小鲜肉,我们不知道怎么就在一起了。 大概就一起走了一段路...
    红小豆子阅读 174评论 0 0
  • Easy 去除链列中值为val的元素 ExampleGiven: 1 --> 2 --> 6 --> 3 --> ...
    穿越那片海阅读 317评论 0 1