一,使用python开启一个web服务器
自带的simple_server模块开启一个服务器;
from wsgiref.simple_server import make_server
#导入simple_server模块
#定义一个application,遵循wsgi协议;
def app(env, start_response): #服务器接收到的客户端请求都会存储在env中,再传入到app进行处理,处理后再返回
start_response("200 ok",[("Content-Type","text/plain")])
return [b'hello'] #swgi协议规定必须返回bety
#实例化一个服务器设置ip为本机,端口为5000,执行程序为上面的app
server = make_server("", 5000, app)
#开启一个服务器,默认0.5秒轮询,接收客户端请求
server.serve_forever()
开启后在浏览器输入localhost:5000即可访问,如下:
二,将我们的app逻辑优化一下
app能够处理多个url以及异常处理如下:
#视图函数
def home(*args):
return "home"
def login(*args):
return "login"
def project(*args):
return "project"
patterns = {"/":home,"/login":login,"/project":project} #路由关系的字典
def app(env, start_response):
url = env.get("PATH_INFO") #从环境变量获取web端传来的url
params = env.get("QUERY_STRING") #从环境变量获取web端传入的参数
if (url is None) or (url not in patterns.keys()):
start_response("404 not found", [("Content-Type", "text/plain")])
return [b"page not found"]
start_response("200 ok",[("Content-Type", "text/plain")])
resp = patterns.get(url)
if resp is None: #key在路由关系里,但是velue为none的情况处理
start_response("404 not found", [("Content-Type", "text/plain")])
return [b"page not found"]
return [resp(params).encode()] #执行视图函数
server = make_server("", 5000, app)
server.serve_forever()
访问url=“/”
访问url=“/login”
访问不存在的url
这是用的python低层模块实现的web服务器,像成熟的框架flask以及django也都是在这个基础上封装的,希望能帮到你~