一、什么是web框架?
框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单的说,就是你用别人搭建好的舞台来做表演。
对于所有的web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。
最简单的web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。
如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。
正确的做法是底层代码由专门的服务器软件实现,我们用python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用python编写web业务。这个接口就是WSGI:Web Server Gateway Interface。
from wsgiref.simple_server import make_server def foo1(request): f=open("alex.html","rb") data = f.read() f.close() return [data] def foo2(request): f = open("amos.html", "rb") data = f.read() f.close() return [data] def login(request): f = open("login.html", "rb") data = f.read() f.close() return [data] def reg(request): f = open("reg.html", "rb") data = f.read() f.close() return [data] def auth(request): print("+++++",request) user_union,pwd_union=request.get("QUERY_STRING").split("&") _,user=user_union.split("=") _,pwd=pwd_union.split("=") if user =='amos' and pwd == '123': return ["登陆成功".encode()] else: return [b'user or pwd is wrong'] def routers(): URLpattern = ( ('/login',login), ('/auth',auth), ('/alex',foo1), ('/amos',foo2), ('/reg',reg), ) return URLpattern def application(environ,start_response): # environ里打包了所有的请求信息 path=environ.get("PATH_INFO") print(path) start_response('200 OK',[('Content-Type','text/html;charset=utf8')]) #返回头信息,可以写多个键值对 urlpattern=routers() func=None for item in urlpattern: if path==item[0]: func=item[1] break if func: return func(environ) else: return [b'404'] # if path=="/amos": # f=open("amos.html","rb") # data=f.read() # f.close() # return [data] # elif path=='/alex': # f = open("alex.html", "rb") # data = f.read() # f.close() # return [data] # else: # return [b'<h1>404</h1>'] t=make_server("",8080,application) #实例化对象 t.serve_forever()