abc
模块介绍
用法介绍
定义一个接口或抽象类
你想定义一个接口或抽象类,并且通过执行类型检查来确保子类实现了某些特定的方法
定义抽象类
1 | from abc import ABCMeta, abstractmethod |
- 抽象类的一个特点是它不能直接被实例化
- 抽象类的目的就是让别的类继承它并实现特定的抽象方法
- 抽象基类的一个主要用途是在代码中检查某些类是否为特定类型,实现了特定接口
getopt 处理命令行参数
模块介绍
getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(–)。
getopt.getopt()
1 | getopt.getopt(args, options[, long_options]) |
- args: 要解析的命令行参数列表。
- options: 以列表的格式定义,options后的冒号(:)表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。
- long_options: 以字符串的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。
对短选项的解析
cmd [-a][-b]
对短选项及短选项的参数解析
cmd [-a a_argument][-b b_argument]
选项a的参数也是可选的情况解析
cmd [-a[a_argument]]
getopt.gnu_getopt()
Cookie 属性
什么是Cookie
cookie机制是采用在客户端保持状态的方案(cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力)。
cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
Cookie内容
cookie组成:
- 名字(name)
- 值(value)
- 过期时间(expires)
- 路径(path)
- 域(domain)
- httponly,表示该cookie是否能通过JS(BOM的document.cookie接口)去访问。
- secure,如果设置为true,则cookie只有在使用SSL连接的时候才发送到服务器。
其中,路径与域一起构成cookie的作用范围。
若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie.会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为 并不是规范规定的。
若设置了过期时间,浏览器就会把cookie保存在硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里cookie,不同的浏览器有不同的处理方式。
Django Mongodb配置
安装配置(支持Python3)
安装mongoengine
1 | pip install mongoengine |
新建MongodbModel
新建model.py文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16mongodb = connect(
'idea',
host='localhost',
port=27017,
username='',
password='',
authentication_source='admin',
authentication_mechanism='SCRAM-SHA-1'
)
class Product(Document):
_id = fields.ObjectId()
access = fields.ListField()
# 指明连接数据库的哪张表
meta = {'collection': 'product'}
需要注意:Product一定要声明对应product表的所有字段(能多不能少),否则报错。
Serializer
使用django-rest-framework-mongoengine
1 | pip install django-rest-framework-mongoengine |
settings.py1
2
3INSTALLED_APPS = [
'rest_framework_mongoengine'
]
models.py1
2
3
4
5
6
7
8class ProductSerializer(DocumentSerializer):
access = serializers.ListField()
class Meta:
model = Product
fields = (
'access',
)
Mongodb 常用命令
连接
验证端口
1 | telnet ip 27107 |
连接数据库
1 | mongo --host=127.0.0.1 --port=27017 |
管理员账户登录
1 | mongo admin -u username -p pwd |
数据库
查看数据库
1 | show dbs |
注意:3.0以上默认是不存在admin数据库
表
查询
- 查看所有字段
1
db.table.find({})
删除指定字段
1 | db.table.update({},{$unset:{'field_name':''}},false, true) |
例如,删除product表的owner字段1
db.product.update({},{$unset: {'owner': "" }}, false, true)
用户
创建管理员用户
1 | # 选择数据库 |
角色说明1
2
3
4
5
6
7
8
9
10Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
数据库添加用户
前提:使用管理员账户登录
对指定数据库创建普通用户1
2
3
4
5
6use db_name
db.createUser({
user: "username",
pwd: "pwd",
roles: [ { role: "readWrite", db: "db_name" } ]
})