Python开发学习笔记(12)————WSGI协议

1.wsgi协议
1)浏览器请求动态页面流程

a。浏览器发送http请求动态资源给web服务器,
b。默认调用应用程序框架的application函数,application必须有两个参数,一个是字典,一个是函数的引用。
c。通过引用调用web服务器的方法,设置返回的状态和头信息
d。调用返回,应用程序框架查询数据库等,生成动态页面的body信息
e。应用程序框架把生成的body信息返回给web服务器的调用
f。web服务器把数据返回给浏览器。

2)定义wsgi接口

简单版

def application(environ, start_response):
	start_response(‘200 OK;, [(‘Content-Type’, ‘text/html’)])
	return ‘Hello World’
environ----一个包含所有HTTP请求信息的dict对象;
start_response----一个发送HTTP响应的函数;
2.闭包

闭包将一些变量和函数封装在函数中,起到封装作用。
同时,相较于类的实例对象,闭包的每个对象占用的空间小
对比:
1>匿名函数能够完成基本的简单功能,传递的是这个函数的引用,只有功能
2>普通函数能够完成较为复杂的功能,传递的是这个函数的引用,只有功能
3>闭包能够完成较为复杂的功能,传递的是这个闭包中的函数以及数据,因此传递的是功能+数据
4>对象能够完成最为复杂的功能,传递的是很多数据+很多功能,因此传递的是功能+数据
在闭包的内部函数中使用 nonlocal ,即可调用外部函数定义的变量值。

4.路由

路由告诉请求应当去执行什么程序

5.伪静态、静态和动态
1)静态URL

静态URL类似域名/news/2012-5-18/110.html,我们一般称为真静态url,每个网页有真实的物理路径。
优点:网站打开速度快,无需运算;网址结构友好,利于记忆。对SEO有好处
SEO:搜索引擎优化
缺点:对于中大型网站,产生的页面多,不好管理

2)动态URL

动态URL类似 域名/News.asp?id=5或者域名/DAk.php?id=17,带有?的URL,我们一般称为动态网址,每个URL只是一个逻辑地址,并不是真实物理存在服务器硬盘中。
优点:适合中大型网站,修改页面方便,因为是逻辑地址,占用硬盘空间比静态空间小。
缺点:需要进行运算,打开速度稍慢。URL结构复杂,不利于记忆。

3)伪静态URL

伪静态URL类似域名/course/74.html这个URL和真静态URL类似。通过伪静态规则把动态URL伪装成静态网址。也是逻辑地址,不存在物理地址。
优点:URL比较友好,利于记忆,适合大中型网站
缺点:设置麻烦,服务器要支持重写规则。访问速度不会变快,因为实质上会额外的进行运算,增加了服务器的负担,速度反而变慢,对于现在的服务器这种影响可以忽略。对SEO没有什么减分影响。

6.日志功能
1)日志级别

五个等级:
DEBUG:详细的信息,通常只出现在诊断问题上
INFO:确认一切按预期运行
WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如,磁盘空间低)这个软件还能按预期工作。
ERROR:更严重的问题,软件没能执行一些功能
CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行。

2)日志输出

一种是输出控制台,另一种是记录到文件中,如日志文件。
1>输出到控制台
代码:

import logging
loging.basicConfig(level=logging.WARNING,
			       format=’%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s’)

#开始使用log功能
logging.info(‘this is logging info message’)
logging.debug(‘this is logging debug message’)
logging.warning(‘this is logging a warning message’)
logging.error(‘this is logging error message’)
logging.critical(‘this is logging critical message’)

2>log日志文件写入文件

import logging
loging.basicConfig(level=logging.WARNING,
			       filename=“log.txt”
			       filemode=“w”
			       format=’%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s’)

#开始使用log功能
logging.info(‘this is logging info message’)
logging.debug(‘this is logging debug message’)
logging.warning(‘this is logging a warning message’)
logging.error(‘this is logging error message’)
logging.critical(‘this is logging critical message’)

3>既要把日志输出到控制台,还要写入日志文件
代码:

import logging
#第一步,创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)  #log等级总开关
#第二步,创建一个handler,用于写入日志文件
logfile = ‘./log.txt’
fh = logging.FileHandler(logfile, mode=’a’) # open的打开模式这里可以进行参考
fh.setLevel(logging.DEBUG) # 输出到file的log等级的开关
#第三步,再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING) # 输出到console的log等级的开关
#第四步,定义handler的输出格式
formatter = logging.Formatter(“%(asctime)s-%(filename)s[line:%(lineno)d]- - %(levelname)s: %(message)s”)
fh.setFormatter(formatter)
ch.setFormatter(formatter)
#第五步,将logger添加到handler里面
logger.addHandler(fh)
logger.addHandler(ch)

#日志
logging.debug(‘this is logging debug message’)
logging.info(‘this is logging info message’)
logging.warning(‘this is logging a warning message’)
logging.error(‘this is logging error message’)
logging.critical(‘this is logging critical message’)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值