在通过pyes获取指定的doctype时不能通过mapping的get_doctype,只能通过get_doctypes获取index下的所有type,然后在自行过滤
1 | _mapping = self._connection.indices.get_mapping(indices=index) |
在通过pyes获取指定的doctype时不能通过mapping的get_doctype,只能通过get_doctypes获取index下的所有type,然后在自行过滤
1 | _mapping = self._connection.indices.get_mapping(indices=index) |
HTTP(HyperText Transfer Protocol, 超文本传输协议) 是访问互联网使用的核心通信协议,也是所有web应用程序使用的通信协议。
消息模型:客户端发送请求消息,服务器返回响应消息。传输层使用具有状态的TCP协议,但HTTP协议本身不具有状态。
HTTP请求消息分为消息头和消息主体(可选),消息头和消息主体用空白行分隔。实例:1
2
3
4
5
6
7
8
9GET / HTTP/1.1
Host: www.cnbeta.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=cnbeta&rn=&rsv_pq=917ee072000177b3&rsv_t=67c29bDcYXbklwxp5LMXvSvgQrSWnKznmk4XgHbAghkt7XqGt%2BfEuP%2BMDo4
Cookie: Hm_lvt_4216c57ef1855492a9281acd553f8a6e=1437836998; Hm_lpvt_4216c57ef1855492a9281acd553f8a6e=1437836998; _ga=GA1.2.1311393193.1437836981; bfd_s=208385984.21594488.1437837000279; tma=208385984.15187292.1437837000282.1437837000282.1437837000282.1; tmd=1.208385984.15187292.1437837000282.; bfd_g=b56c782bcb75035d00000a500201ba8455b3a6ca
Connection: keep-alive
说明:
1.消息头第一行由三个以空格分隔的元素组成,分别为HTTP方法、请求的URL和使用的HTTP版本
HTTP方法;
1). GET:用于获取资源,参数通过URL查下字符串方式提交给服务器,无消息主体
2). POST:用于执行操作,参数可以通过URL查下字符串方式和消息主体提交给服务
3). HEAD:用于检测资源是否存在,与GET类似,区别在于在响应消息中返回的消息主体为空
4). TRACE:用于诊断,可判断客户端和服务器之间是否存在代理服务器,原理:服务器在响应主体中返回收到的请求消息的具体内容
5). OPTIONS:用于要求服务器报告对某一资源有效的HTTP方法,服务器常返回Allow消息头的响应,并列出所有有效的方法
6). PUT:使用请求主体中的内容向服务器上传指定的资源
7). DELETE:用于删除资源
8). CONNECT:
请求URL:用于指定请求的资源名称以及查下参数
2.其他
HTTP响应消息分为消息头和消息主体(可选),消息头和消息主体用空白行分隔。实例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21HTTP/1.0 200 OK
Content-Type: text/html
Last-Modified: Sat, 25 Jul 2015 15:52:02 GMT
Vary: Accept-Encoding
Server: nginx/1.4.1
Date: Sat, 25 Jul 2015 15:53:04 GMT
ETag: "55b3b0a2-2539c"
Age: 74
X-Cache: HIT from RJ-ZSBGP-CDN-74
Set-Cookie: uuid=AQAAAEx080zNuwoAJH3PdhcuX+oK943s; Path=/; Expires=Sat, 25-Jul-15 17:09:08 GMT; HttpOnly
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>cnBeta.COM</title>
<body>
Hello, Silence!
</body>
</html>
说明:
1.消息头第一行由三个空格分开的元素组成,分别表示HTTP版本、请求状态码(数字)、请求状态描述
2.其他:
URL(Uniform Resource Locator,统一资源定位符)是web资源的唯一标识,格式:
protocol://hostname[:port]/[path/]file[?param=value]
REST(表达性状态转移)是分布式系统的一个体系架构,REST风格URL 指在URL中使用文件路径方式替代查询字符串
1.常用消息头
0\r\n\r\n
标识数据结束,在其他块数据中格式为\r\ncontent\r\n
2.请求消息头
3.响应消息头
服务器使用Set-Cookie响应消息头向浏览器发布cookie信息,可以使用多个响应消息头发布多个cookie,浏览器也可使用Cookie请求消息头提交使用分号分隔的多个cookie信息给服务器
cookie具有名称、值、有效时间、有效域、有效路径、是否为https请求、是否可在客户端修改属性,可通过Set-Cookie响应消息头设置,参数列表如下:
状态码用于说明请求结果,分为5大类:
常见状态码说明:
HTTP使用非加密的TCP作为传输机制,缺点在网络适当位置的攻击者能够截获发送内容,HTTPS和HTTP都属于应用层协议,当HTTPS通过安全传输机制-安全套接层(Secure Socket Layer,SSL)传输数据,可保护通过网络传输数据的机密性和完整性
SSL已经由TLS(Transport Layer Security,传输层安全)代替
代理服务器运行在客户端浏览器和web服务器之间,浏览器将所有请求提交给代理服务器,代理服务器将请求传送给相关web服务器,并将响应返回给浏览器
HTTP代理服务器工作机制:
HTTP具有自己的用户身份验证机制,主要方案由:
需要运行route add 本地IP mask 255.255.255.255 网关IP
logging模块是python日志管理模块
1 | In [19]: import logging |
日志级别:
CRITICAL > ERROR > WARNING(默认) > INFO > DEBUG > NOTSET
默认日志格式:
LOGLEVEL:LOGGERNAME:msg
使用logging.basicConfig进行日志输出信息配置
1 | logging.basicConfig(level=logging.DEBUG, |
参数说明:
1.level:指定日志记录级别,可选值logging.ERROR/WARNING/INFO/DEBUG
2.format:指定日志输出格式:
参数 | 说明 |
---|---|
%(name)s | Logger的名字 |
%(levelno)s | 数字日志级别 |
%(levelname)s | 文本日志级别 |
%(pathname)s | 调用日志输出函数的模块文件路径 |
%(filenames)s | 调用日志输出函数的模块文件名 |
%(module)s | 调用日志输出函数的模块名 |
%(funcName)s | 调用日志输出函数的函数名 |
%(lineno)d | 调用日志输出函数语句所在行号 |
%(created)f | 当前时间 |
%(relativeCreated)d | 当前时间 |
%(asctime)s | 当前时间,格式’2015-05-28 20:50:03,345’ |
%(thread)d | 线程id |
%(threadName)s | 线程名 |
%(process)d | 进程id |
%(message)s | 消息 |
3.datefmt:指定日志中日期格式
4.filemode:指定文件打开方式
5.filename:指定日志文件位置
6.stream:制定stream创建StreamHandler,若同时存在filename和stream时,filename启用
1 | import logging |
logger说明:
logging.getLogger为默认根logger,logger为树形结构, 在使用m2logger时并为设置hander、formatter、level,但其输出与mlogger相同,原因logger具有继承功能(按名称进行属性继承)
logger.Filter('com.uk.silence')
用于定义filter功能,表示只有以com.uk.silence.child
开头的logger进行信息输出,按示例若指定mlogger.addFilter(filter)
后使用mlogger.error则不能输出日志
handler说明:
类型 | 说明 |
---|---|
logging.StreamHandler | 指定向流对象进行 |
logging.FileHandler | 指定文件 |
logging.handlers.RotaingFileHandler | 指定文件,但可管理文件大小,当超过指定值后则重新创建日志文件 |
logging.handlers.TimedRotatingFileHandler | 指定文件,超过指定周期后重新创建日志文件 |
logging.handlers.SocketHandler | 指定socket |
logging.handlers.SyslogHandler | 指定syslog服务器 |
logging.handlers.HTTPHandler | 使用post/get请求提交数据到web服务器 |
使用文件方式进行日志管理配置,配置文件格式如:
1 | [loggers] |
bpmappers库是将python对象转化为字典类型的库, 在对外提供数据服务类型的功能开发用途较大,尤其后台使用django开发,bpmappers库简便将对象转化为dict类型,配和json.dumps功能对外提供json格式数据
pip install bpmappers
类的定义:
1 | class Person(object): |
试验:
1 | In [6]: me = Person('silence', 28) |
1 | class Blog(object): |
试验:
1 | In [27]: blog = Blog('bpmappers test', me) |
1 | from bpmappers import ListDelegateField |
试验:
1 | In [34]: group = Group('python', [me]) |
1 |
|
试验:
1 | In [45]: ValueMapper(1).as_dict() |
1 | class Value(object): |
试验:
1 | In [77]: ValueMapper(Value('test')).as_dict() |
执行顺序:
1.filter
2.callback
3.after_callback
4.after_filter
1 | from bpmappers import djangomodel |
试验:
1 | In [77]: PersonModelMapper(Person.objects.get(pk=1)).as_dict() |