python_learning_25 mini_web框架

怎么可以不修改服务器和架构代码而确保可以在多个架构下运行web服务器呢?

答案就是 Python Web Server Gateway Interface (或简称 WSGI,读作“wizgy”)。

WSGI允许开发者将选择web框架和web服务器分开。可以混合匹配web服务器和web框架,选择一个适合的配对。比如,可以在Gunicorn 或者 Nginx/uWSGI 或者 Waitress上运行 Django, Flask, 或 Pyramid。真正的混合匹配,得益于WSGI同时支持服务器和架构:

web服务器必须具备WSGI接口,所有的现代Python Web框架都已具备WSGI接口,它让你不对代码作修改就能使服务器和特点的web框架协同工作。

WSGI由web服务器支持,而web框架允许你选择适合自己的配对,但它同样对于服务器和框架开发者提供便利使他们可以专注于自己偏爱的领域和专长而不至于相互牵制。其他语言也有类似接口:java有Servlet API,Ruby 有 Rack。

1.静态资源和动态资源
静态资源可以理解为前端的固定页面,这里面包含HTML、CSS、JS、图片等等,不需要查数据库也不需要程序处理,直接就能够显示的页面,如果想修改内容则必须修改页面,但是访问效率相当高。
动态资源,需要程序处理或者从数据库中读数据,能够根据不同的条件在页面显示不同的数据,内容更新不需要修改页面但是访问速度不及静态页面。

2.什么是WSGI协议
Web服务器网关接口,Web Server Gateway Interface (或简称 WSGI,读作“wizgy”)。
是一种协议、一种规定,遵守WSGI协议能够让web服务器和框架之间解耦,可以混合搭配服务器和框架,互相兼容。

3.如何定义WSGI接口
在框架实现一个application函数(相当于框架的一个唯一入口),此函数要有两个参数,第一个是字典参数,第二个参数是服务器端一个函数的引用,用来处理header头。
下面是一个最通俗的例子:
def application(environ, start_response):
start_response(‘200 OK’, [(‘Content-Type’, ‘text/html’)])
return ‘Hello World!’
上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
• environ:一个包含所有HTTP请求信息的dict对象;
• start_response:一个发送HTTP响应的函数。
这个application()函数是由服务器来调用,服务器上要实现start_response()函数用来设置头信息。

4.sys.argv的使用
作用:返回当前文件本身的名字及给定文件的参数.

import sys
print(sys.argv)

当你在运行这个文件的时候会返回一个列表,里面包含了当前文件名以及后续的参数
譬如:python3 test.py 7890 a b c
此时打印结果为: [‘test.py’, ‘7890’, ‘a’, ‘b’, ‘c’]

5.导入模块是变量名时如何导入
当模块名是变量名的时候就不能直接import的方式导入了,因为会把变量名当成模块名去找。
此时可以使用原生的__import__()函数去导入模块,它支持传递一个字符串,也可以是一个变量名(字符串类型)。
getattr(object, name[, default]) 这是一个Python内置函数,作用是从对象中读取出来属性或者方法当成一个变量来处理。

frame_name = ‘mini_frame’
app_name = ‘application’
frame = import(frame_name) # 此时相当于导入了mini_frame模块
app = getattr(frame, app_name) # 此时app就指向了mini_frame模块中的application这个函数

猜你喜欢

转载自blog.csdn.net/weixin_44786482/article/details/89643336